From e47f46affc993c530545e69169af493e5cb85044 Mon Sep 17 00:00:00 2001 From: PatrickScheich <50054697+PatrickScheich@users.noreply.github.com> Date: Tue, 20 Apr 2021 20:42:56 +0200 Subject: [PATCH 001/293] telegraf updates for v1.7.0RC3 (#2204) * new path of "vcgencmd" at raspiblitz v1.7.0RC2 * whitespaces + rename raspiblitz_ip_info -> ipinfo * add mempool info via bitcoincli Co-authored-by: Patrick Scheich --- .../etc-telegraf/getraspiblitzipinfo.sh | 42 ++++++++++--------- .../telegraf.d/telegraf_inputs.conf | 23 ++++++++-- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh b/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh index aa3210c01..17564c09b 100644 --- a/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh +++ b/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh @@ -3,7 +3,7 @@ ############################################################################### # File: getraspiblitzipinfo.sh -# Date: 2020-10-04 +# Date: 2021-04-19 ############################################################################### # set the "debugLevel" @@ -18,17 +18,17 @@ logFile=/mnt/hdd/temp/raspiblitzipinfo.log # get the ISO timestamp for log output sts=$(date --iso-8601='seconds') -if [ -f "${logFile}" ]; then printf "\n---\n%s: %s started\n" "$sts" "$0" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "\n---\n%s: %s started\n" "$sts" "$0" >> ${logFile} ;fi # get the seconds since UNIX epoch unixTimestamp=$(date +"%s") -if [ -f "${logFile}" ]; then printf "%s: unixTimeStamp = %s\n" "$sts" "$unixTimestamp" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "%s: unixTimeStamp = %s\n" "$sts" "$unixTimestamp" >> ${logFile} ;fi # get active network device (eth0 or wlan0) networkDevice=$(ip addr | grep -v "lo:" | grep 'state UP' | tr -d " " | cut -d ":" -f2 | head -n 1) # -if [ -f "${logFile}" ]; then printf "%s: networkDevice = %s\n" "$sts" "$networkDevice" >> ${logFile} ;fi -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "%s: networkDevice = %s\n" "$sts" "$networkDevice" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # create the indexed array "origin" an fill it # this also creates the "Enumeration" @@ -41,8 +41,8 @@ if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi declare -a origin origin=(publicIP bitcoind lnd IPv6 IPv4) # -#if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: origin[ %d ] = %s\n" "$sts" "$i" "${origin[ $i ]}" >> ${logFile} ;done ;fi -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: origin[ %d ] = %s\n" "$sts" "$i" "${origin[ $i ]}" >> ${logFile} ;done ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # # further we need the arrays @@ -70,8 +70,8 @@ ip_addr_curr[2]=$(/usr/local/bin/lncli --lnddir=/mnt/hdd/app-data/lnd getinfo ip_addr_curr[3]=$(ip -o -6 address show scope global up dev ${networkDevice} 2>/dev/null | cut -d'/' -f1 | awk '/inet6/{print $4}' | head -n 1) ip_addr_curr[4]=$(ip -o -4 address show scope global up dev ${networkDevice} 2>/dev/null | cut -d'/' -f1 | awk '/inet/{print $4}' | head -n 1) # -if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: ip_addr_curr[ %d ] = %s\n" "$sts" "$i" "${ip_addr_curr[ $i ]}" >> ${logFile} ;done ;fi -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: ip_addr_curr[ %d ] = %s\n" "$sts" "$i" "${ip_addr_curr[ $i ]}" >> ${logFile} ;done ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # if [ ${debugLevel} -gt 10 ]; then for i in $( seq 0 4 ); do printf " %2d: %-10s = %s\n" "$i" "${origin[ $i ]}" "${ip_addr_curr[ $i ]}" ;done ;fi @@ -93,12 +93,12 @@ for i in $( seq 0 4 ); do ip_addr_prev[ $i ]=${!s} # if the variable is still empty, fill it with "N/A" - if [ "ip_addr_prev[ $i ]" == "" ]; then ip_addr_prev[ $i ]="N/A" ; fi + if [ "ip_addr_prev[ $i ]" == "" ]; then ip_addr_prev[ $i ]="N/A" ; fi #if [ -f "${logFile}" ]; then printf "%s: from memoryfile variable %30s = %s\n" "$sts" "$s" "${ip_addr_prev[ $i ]}" >> ${logFile} ; fi if [ ${debugLevel} -gt 10 ]; then printf " %2d: read into ip_addr_prev[%d] from memoryfile variable %30s = %s\n" "$i" "$i" "$s" "${ip_addr_prev[ $i ]}" ; fi done -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # initialize the Creation TimeStamps with their old values from the memory file @@ -121,7 +121,7 @@ for i in $( seq 0 4 ); do #if [ -f "${logFile}" ]; then printf "%s: from memoryfile variable %30s = %s\n" "$sts" "$s" "${creation_ts_curr[ $i ]}" >> ${logFile} ; fi if [ ${debugLevel} -gt 10 ]; then printf " %2d: read into creation_ts_curr/prev[%d] from memoryfile variable %30s = %s\n" "$i" "$i" "$s" "${creation_ts_curr[ $i ]}" ; fi done -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # initialize the "has_changed" flag array @@ -146,7 +146,7 @@ for i in $( seq 0 4 ); do if [ ${debugLevel} -gt 10 ]; then printf " %2d: IP addr --NOT changed-- for %10s: %40s (new) == %40s (old)\n" "$i" "${origin[ $i ]}" "${ip_addr_curr[$i]}" "${ip_addr_prev[$i]}" ; fi fi done -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # IF at least one value of the memory file needs to be updated, the whole file will be rewritten. @@ -174,9 +174,9 @@ if [ ${changes} -gt 0 ]; then echo " " >> ${memoryFile} done - if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi + if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi if [ -f "${logFile}" ]; then cat ${memoryFile} >> ${logFile} ; fi - if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi + if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi else # display info on stdout echo "" @@ -203,7 +203,9 @@ fi # now create the output for the telegraf "[[inputs.exec]]" section in influx-line-format # -# measurement: raspiblitz_ip_info +# 2021-04-19: rename measurement: "raspiblitz_ip_info" -> "ipinfo" +# +# measurement: ipinfo # # tags # * host @@ -228,13 +230,13 @@ for i in $( seq 0 4 ); do # # create influx-line-format output # only if there is a proper creation timestamp - if [ ${creation_ts_curr[ $i ]} -gt 1000000000 ]; then - influxLine="raspiblitz_ip_info,origin=${origin[ $i ]},ipaddr=${ip_addr_curr[$i]},ipaddr_prev=${ip_addr_prev[$i]},ipaddr_changed=${has_changed[ $i ]} created=${creation_ts_curr[ $i ]}i,uptime=${ipaddr_online}i,changed=${has_changed[ $i ]}i" + if [ ${creation_ts_curr[ $i ]} -gt 1000000000 ]; then + influxLine="ipinfo,origin=${origin[ $i ]},ipaddr=${ip_addr_curr[$i]},ipaddr_prev=${ip_addr_prev[$i]},ipaddr_changed=${has_changed[ $i ]} created=${creation_ts_curr[ $i ]}i,uptime=${ipaddr_online}i,changed=${has_changed[ $i ]}i" if [ -f "${logFile}" ]; then printf "%s: === %s\n" "$sts" "$influxLine" >> ${logFile} ; fi echo "${influxLine}" - else + else if [ -f "${logFile}" ]; then printf "%s: creation time ERROR for origin %s \n" "$sts" "${origin[ $i ]}" >> ${logFile} ; fi - fi + fi done # -eof- diff --git a/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf b/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf index 5c6e19ed5..dabf31146 100644 --- a/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf +++ b/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf @@ -75,6 +75,22 @@ data_format = "json" +#### Bitcoin related metric +#### basic information about the mempool +#### --> https://developer.bitcoin.org/reference/rpc/getmempoolinfo.html +## +## Most usefull fields... +## * loaded (boolean) True if the mempool is fully loaded +## * size (numeric) Current tx count +## * usage (numeric) Total memory usage for the mempool +## +[[inputs.exec]] + interval = "60s" + commands = ["/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf getmempoolinfo" ] + name_override = "bitcoin_mempoolinfo" + data_format = "json" + + #### Bitcoin related metric #### information about network traffic, including bytes in, bytes out, and current time window #### --> https://developer.bitcoin.org/reference/rpc/getnettotals.html @@ -203,6 +219,7 @@ ##################################### #### Hardware data: cpu/gpu temperature, voltage, cpu clock #### +#### 2021-04-19 adopt to new path of "vcgencmd" at raspiblitz v1.7.0RC2 ##################################### [[inputs.file]] files = ["/sys/class/thermal/thermal_zone0/temp"] @@ -212,21 +229,21 @@ [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_temp"] + commands = ["/usr/bin/vcgencmd measure_temp"] name_override = "gpu_temperature" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_volts core"] + commands = ["/usr/bin/vcgencmd measure_volts core"] name_override = "cpu_volts" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_clock arm"] + commands = ["/usr/bin/vcgencmd measure_clock arm"] name_override = "cpu_frequency" data_format = "grok" grok_patterns = ["=%{NUMBER:value:int}"] From 8659e641b3763eea4e2f81cd0daec92907ca1a13 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Apr 2021 07:48:21 +0100 Subject: [PATCH 002/293] CHANGES: note using the base image from April 2021 --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 9d63807bd..a575d374a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,7 @@ ## What's new in Version 1.7.0 of RaspiBlitz? -- New: Raspberry Pi OS Base Image 64-bit (August 2020) +- New: Raspberry Pi OS Base Image 64-bit (April 2021) - New: Build SD card Image with parameters & FatPack [details](https://github.com/rootzoll/raspiblitz/pull/2044) - New: Improve LND uptime and reliability over Tor [details](https://github.com/rootzoll/raspiblitz/pull/2148) - New: Lightning Terminal v0.4.1-alpha (Loop, Pool & Faraday UI Bundle) [details](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) From b1d6384407fa7c9e1261ed17b678828aaef745a5 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sat, 24 Apr 2021 00:12:29 +0200 Subject: [PATCH 003/293] #2221 change hdmi mode (#2224) --- home.admin/config.scripts/blitz.display.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.display.sh b/home.admin/config.scripts/blitz.display.sh index 6509451ce..bda62ab5a 100755 --- a/home.admin/config.scripts/blitz.display.sh +++ b/home.admin/config.scripts/blitz.display.sh @@ -267,6 +267,8 @@ function install_lcd() { # modify /boot/config.txt sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt + sudo sed -i '/^hdmi_group=/d' /boot/config.txt 2>/dev/null + sudo sed -i "/^hdmi_mode=/d" /boot/config.txt 2>/dev/null #echo "hdmi_force_hotplug=1" >> /boot/config.txt sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt # echo "dtparam=i2c_arm=on" >> /boot/config.txt --> this is to be called I2C errors - see: https://github.com/rootzoll/raspiblitz/issues/1058#issuecomment-739517713 @@ -327,7 +329,11 @@ function uninstall_lcd() { # remove modifications of config.txt sudo sed -i '/^hdmi_force_hotplug=/d' /boot/config.txt 2>/dev/null - sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt + sudo sed -i '/^hdmi_group=/d' /boot/config.txt 2>/dev/null + sudo sed -i "/^hdmi_mode=/d" /boot/config.txt 2>/dev/null + sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt 2>/dev/null + echo "hdmi_group=1" >> /boot/config.txt + echo "hdmi_mode=3" >> /boot/config.txt echo "dtoverlay=pi3-disable-bt" >> /boot/config.txt echo "dtoverlay=disable-bt" >> /boot/config.txt @@ -400,7 +406,7 @@ function install_lcd_legacy() { # add waveshare mod sudo cp ./waveshare35a.dtbo /boot/overlays/ - # modify /boot/config.txt + # modify /boot/config.txt sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt #echo "hdmi_force_hotplug=1" >> /boot/config.txt sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt From 87e297a3cfb9e7f5da4a80d9e6273ff6cc6f32c5 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:19:26 +0100 Subject: [PATCH 004/293] unlock LND after Bitcoin Core install if ready (#2214) * unlock LND after Bitcoin Core install if ready * bitcoin.update: improve output and comments --- home.admin/config.scripts/bitcoin.update.sh | 61 +++++++++++---------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.update.sh b/home.admin/config.scripts/bitcoin.update.sh index a24cfb8fb..c852b4ea8 100755 --- a/home.admin/config.scripts/bitcoin.update.sh +++ b/home.admin/config.scripts/bitcoin.update.sh @@ -2,15 +2,15 @@ # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "Interim optional Bitcoin Core updates between RaspiBlitz releases." - echo "bitcoin.update.sh [info|tested|reckless|custom]" - echo "info -> get actual state and possible actions" - echo "tested -> only do a tested update by the RaspiBlitz team" - echo "reckless -> the update was not tested by the RaspiBlitz team" - echo "custom -> update to a chosen version" - echo " the binary will be checked by signature and checksum in all cases" - echo - exit 1 + echo "Interim optional Bitcoin Core updates between RaspiBlitz releases." + echo "bitcoin.update.sh [info|tested|reckless|custom]" + echo "info -> get actual state and possible actions" + echo "tested -> only do a tested update by the RaspiBlitz team" + echo "reckless -> the update was not tested by the RaspiBlitz team" + echo "custom -> update to a chosen version" + echo " the binary will be checked by signature and checksum in all cases" + echo + exit 1 fi source /home/admin/raspiblitz.info @@ -156,9 +156,9 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo "# !!! FAIL !!! Download laanwj-releases.asc not success." exit 1 fi - gpg ./laanwj-releases.asc - fingerprint=$(gpg ./laanwj-releases.asc 2>/dev/null | grep "${laanwjPGP}" -c) - if [ ${fingerprint} -lt 1 ]; then + gpg --import-options show-only --import ./laanwj-releases.asc + fingerprint=$(gpg ./laanwj-releases.asc 2>/dev/null | grep -c "${laanwjPGP}") + if [ ${fingerprint} -eq 0 ]; then echo echo "# !!! BUILD WARNING --> Bitcoin PGP author not as expected" echo "# Should contain laanwjPGP: ${laanwjPGP}" @@ -184,13 +184,7 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo fi - # get the sha256 value for the corresponding platform from signed hash sum file - bitcoinSHA256=$(grep -i "$bitcoinOSversion" SHA256SUMS.asc | cut -d " " -f1) - - echo - echo "# BITCOIN v${bitcoinVersion} for ${bitcoinOSversion}" - - # download resources + echo "# Downloading Bitcoin Core v${bitcoinVersion} for ${bitcoinOSversion} ..." binaryName="bitcoin-${bitcoinVersion}-${bitcoinOSversion}.tar.gz" sudo -u admin wget https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/${binaryName} if [ ! -f "./${binaryName}" ] @@ -200,26 +194,31 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" fi echo "# Checking binary checksum ..." - binaryChecksum=$(sha256sum ${binaryName} | cut -d " " -f1) - if [ "${binaryChecksum}" != "${bitcoinSHA256}" ]; then - echo "!!! FAIL !!! Downloaded BITCOIN BINARY not matching SHA256 checksum: ${bitcoinSHA256}" + checksumTest=$(sha256sum -c --ignore-missing SHA256SUMS.asc ${binaryName} 2>/dev/null \ + | grep -c "${binaryName}: OK") + if [ "${checksumTest}" -eq 0 ]; then + # get the sha256 value for the corresponding platform from signed hash sum file + bitcoinSHA256=$(grep -i "$bitcoinOSversion" SHA256SUMS.asc | cut -d " " -f1) + echo "!!! FAIL !!! Downloaded BITCOIN BINARY CHECKSUM:" + echo "$(sha256sum ${binaryName})" + echo "NOT matching SHA256 checksum:" + echo "${bitcoinSHA256}" exit 1 else echo - echo "# OK --> VERIFIED BITCOIN CHECKSUM CORRECT" + echo "# OK --> VERIFIED BITCOIN CHECKSUM IS CORRECT" echo fi fi if [ "${mode}" = "tested" ]||[ "${mode}" = "custom" ]; then - # note: install will be done the same as reckless further down bitcoinInterimsUpdateNew="${bitcoinVersion}" elif [ "${mode}" = "reckless" ]; then bitcoinInterimsUpdateNew="reckless" fi -# JOINED INSTALL (tested & RECKLESS) +# JOINED INSTALL if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" ];then # install @@ -247,14 +246,18 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo "# OK Bitcoin Core ${bitcoinVersion} is installed" if [ "${state}" == "ready" ]; then + echo + echo "# Starting ..." sudo systemctl start bitcoind + sleep 10 + echo sudo systemctl start lnd + echo "# Starting LND ..." + sleep 10 echo - echo "# Restarted LND" - echo "# Use: 'lncli unlock' to unlock the LND wallet once Bitcoin Core is synced" - echo - echo "# Press ENTER to exit to the menu ..." + echo "# Press ENTER to proceed to unlock the LND wallet ..." read key + sudo /home/admin/config.scripts/lnd.unlock.sh fi exit 0 From baeb34d9709a3d5f8b79dea3f8e17634097be34b Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Fri, 23 Apr 2021 22:20:53 +0000 Subject: [PATCH 005/293] show nginx systemd logs (#2220) This is important, normally nginx fails and this is not shown. --- home.admin/XXdebugLogs.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/XXdebugLogs.sh b/home.admin/XXdebugLogs.sh index 8dac7be0c..6d15acb94 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/XXdebugLogs.sh @@ -71,6 +71,10 @@ echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log" sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log echo "" +echo "*** NGINX SYSTEMD STATUS ***" +sudo systemctl status nginx -n2 --no-pager +echo "" + echo "*** LAST NGINX LOGS ***" echo "sudo journalctl -u nginx -b --no-pager -n20" sudo journalctl -u nginx -b --no-pager -n20 From fe54f6e26982dd92156a620dcac07f5c31d6a820 Mon Sep 17 00:00:00 2001 From: d11n Date: Sat, 24 Apr 2021 00:21:54 +0200 Subject: [PATCH 006/293] Update stacking-sats-kraken version (#2216) --- home.admin/config.scripts/bonus.stacking-sats-kraken.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.stacking-sats-kraken.sh b/home.admin/config.scripts/bonus.stacking-sats-kraken.sh index 032241fc4..f4f0c6e47 100755 --- a/home.admin/config.scripts/bonus.stacking-sats-kraken.sh +++ b/home.admin/config.scripts/bonus.stacking-sats-kraken.sh @@ -9,7 +9,7 @@ CONFIG_FILE=$APP_DATA_DIR/.env RASPIBLITZ_FILE=/mnt/hdd/raspiblitz.conf SCRIPT_DIR=$HOME_DIR/stacking-sats-kraken SCRIPT_NAME=stacksats.sh -SCRIPT_VERSION=0.4.2 +SCRIPT_VERSION=0.4.3 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From fae495f8a5dc3801005b6b2c8ae326592b98a409 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Apr 2021 01:03:53 +0200 Subject: [PATCH 007/293] small ux thing - bigger dialog box --- home.admin/20recoverDialog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/20recoverDialog.sh b/home.admin/20recoverDialog.sh index 90c2b2557..4980530a5 100755 --- a/home.admin/20recoverDialog.sh +++ b/home.admin/20recoverDialog.sh @@ -35,7 +35,7 @@ Write them down & store them in a safe place. if [ "$?" != "0" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "Please write down your Password C:\n${oldPasswordC}" 10 52 else - dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 6 52 + dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 8 52 fi elif [ ${resetAlsoPasswordB} -gt 0 ]; then From f5f3e2437a01cb728e299649ec9872bb44dd2a76 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sat, 24 Apr 2021 12:46:21 +0200 Subject: [PATCH 008/293] #2070 checking version & resetting password c (#2226) --- home.admin/config.scripts/blitz.migration.sh | 28 +++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 498f3d949..dd98c15b2 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -141,7 +141,33 @@ if [ "$1" = "migration-umbrel" ]; then echo "# starting to rearrange the data drive for raspiblitz .." - # extract data + # determine version + version=$(sudo cat /mnt/hdd/umbrel/info.json | jq -r '.version') + if [ "${version}" == "" ]; then + echo "err='not able to get version'" + exit 1 + fi + versionMajor=$(echo "${version}" | cut -d "." -f1) + versionMiner=$(echo "${version}" | cut -d "." -f2) + versionPatch=$(echo "${version}" | cut -d "." -f3) + if [ "${versionMajor}" == "" ] || [ "${versionMiner}" == "" ] || [ "${versionPatch}" == "" ]; then + echo "err='not able processing version'" + exit 1 + fi + + # since 0.3.9 umbrel uses a fixed/default password for lnd wallet (before it was the user set one) + if [ ${versionMajor} -eq 0 ] && [ ${versionMiner} -lt 4 ] && [ ${versionPatch} -lt 9 ]; then + echo "# umbrel before 0.3.9 --> password c is old user set password" + else + echo "# umbrel 0.3.9 or higher --> password c is fixed 'moneyprintergobrrr'" + # set flag with standard password to be changed on final recovery setup + sudo touch /mnt/hdd/passwordc.flag + sudo chmod 777 /mnt/hdd/passwordc.flag + echo "moneyprintergobrrr" >> /mnt/hdd/passwordc.flag + sudo chown admin:admin /mnt/hdd/passwordc.flag + fi + + # extract detailed data nameNode=$(sudo jq -r '.name' /mnt/hdd/umbrel/db/user.json) # move bitcoin/blockchain & call function to migrate config From 6131f23591b99cb1c1de7fa17a9507bc52266a8b Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:40:15 +0000 Subject: [PATCH 009/293] Table of options on how to have blitz (#2219) --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c9cbf80ff..fb395a236 100644 --- a/README.md +++ b/README.md @@ -129,14 +129,19 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software -Your SD-card needs to contain the RaspiBlitz software. You can take the long road by [building the SD-card image yourself](#build-the-sd-card-image) or use the already prepared SD-Card image: +|Method|Build the sd card|Install the image| +|------|-----------------|-----------------| +|Philosophy|Sovereignty|Trust| +|Difficulty level|Medium|Easy| +|Pros|You don't need to trust us, build from your own forked repository|Make Blitz accessible to everyone| +|Cons|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs|You have to trust the mantainer image binaries| +|Instructions|[Build your own sd card image](https://github.com/rootzoll/raspiblitz/tree/master#build-the-sd-card-image)|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)| +|Verify what?|All of the code, don't trust, verify|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)| -**Download SD-Card image - Version 1.7.0RC2 (JUST FOR TESTING)** - -Browser: https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC2-2021-04-09.img.gz - -SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 or [SIGNATURE]() +If downloading the mantainer image, the shasum is: +* SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 +Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) * [How to update my RaspiBlitz?](README.md#updating-raspiblitz-to-new-version) * [How to verify the SD card image after download?](FAQ.md#how-to-verify-the-sd-card-image-after-download) From 4fae234e85af336d13ec75185d0e07fb4849e48e Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:57:05 +0000 Subject: [PATCH 010/293] Create SECURITY.md (#2212) --- SECURITY.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..bba6f56de --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,40 @@ +# Security Policy + +## Supported Versions + +Updates are made only for the latest version. + +Security patches can be done with `Menu > Patch` for the current branch in the case of a high risk issue before next release. + +The latest version always have the `latest` tag. To make sure you are using the lastest version, run: +``` +curl -s https://api.github.com/repos/rootzoll/raspiblitz/releases/latest|grep tag_name|head -1|cut -d '"' -f4 +``` + +## Reporting a Vulnerability + +To report security issues send an email to christian@rotzoll.de (not for support). + +The following keys may be used to communicate sensitive information to developers: + +| Name | Fingerprint | 64-bit | +|------|-------------|--------| +|Rootzoll|92A7 46AE 33A3 C186 D014 BF5C 1C73 060C 7C17 6461|1C73 060C 7C17 6461| +|Openoms|13C6 88DB 5B9C 745D E4D2 E454 5BFB 7760 9B08 1B65|5BFB 7760 9B08 1B65| + +You can import a key by running the following command with that individual’s fingerprint: +``` +curl https://keybase.io/rootzoll/pgp_keys.asc | gpg --import +curl https://keybase.io/oms/pgp_keys.asc | gpg --import +``` +Ensure that you put quotes around fingerprints containing spaces if importing with other methods. + +# Online Security +* Wi-fi and Bluetooth is disabled by default in the build script. +* UFW is active and only specific ports are open, closing ports and removing hidden services when services are uninstalled. +* Admin (and Joinmarket [optional]) users have passwordless sudo access to be able to perform installations and read password without much user interaction. + +# Physical Security +* All wallets and user interfaces are password protected so this has more privacy implications (in the case of physical theft) than security. +* Optional log in through SSH using a hardware wallet. +* LUKS encryption would be welcome in the future. From 0b9c41ea04024ce3bb019c191ecd96112676f189 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sun, 25 Apr 2021 00:10:07 +0200 Subject: [PATCH 011/293] merge updates documentation for v1.7 --- FAQ.md | 10 + README.md | 479 ++++++++++++++---------------- SECURITY.md | 37 ++- pictures/connect.png | Bin 0 -> 78698 bytes pictures/lit.png | Bin 0 -> 424893 bytes pictures/mainmenu.png | Bin 61026 -> 122651 bytes pictures/mempool.png | Bin 0 -> 493878 bytes pictures/raspilogo_tile.png | Bin 0 -> 60977 bytes pictures/raspilogo_tile_400px.png | Bin 0 -> 18990 bytes pictures/services.png | Bin 30567 -> 97478 bytes pictures/settings.png | Bin 27874 -> 79520 bytes pictures/system.png | Bin 0 -> 82721 bytes pictures/update.png | Bin 0 -> 96885 bytes 13 files changed, 275 insertions(+), 251 deletions(-) create mode 100644 pictures/connect.png create mode 100644 pictures/lit.png create mode 100644 pictures/mempool.png create mode 100644 pictures/raspilogo_tile.png create mode 100644 pictures/raspilogo_tile_400px.png create mode 100644 pictures/system.png create mode 100644 pictures/update.png diff --git a/FAQ.md b/FAQ.md index 6bc4f9d94..26e8f5407 100644 --- a/FAQ.md +++ b/FAQ.md @@ -73,6 +73,7 @@ - [Let's Encrypt - eMail Address](#lets-encrypt---email-address) - [Let's Encrypt - Installation details](#lets-encrypt---installation-details) - [How can I customize my RaspiBlitz or add other software?](#how-can-i-customize-my-raspiblitz-or-add-other-software) +- [How do I find the IP address when running without a display?](#how-do-i-find-the-ip-address-when-running-without-a-display) --- @@ -931,3 +932,12 @@ The RaspiBlitz is your computer to experiment with. Feel free to add your own sc - Hot fixes & new features for minor verisons will be created as single branches from the release branch, and once ready will be merged back into that release branch as a Pull Request using 'Squash-Merge' AND then, this 'Squash-Merge' (one single commit) will get cherry-picked into the 'dev' branch ('git cherry-pick COMMITHASH' - may call 'git fetch' & 'git pull' before to make a clean cherry-pick into dev). +# How do I find the IP address when running without a display? + +If you can login into your local internet router it should show you the IP address assigned to the RaspberryPi. + +Another way is to use [Angry IP Scanner](https://angryip.org/) to find the IP address. + +You can also put an empty file just called `hdmi` (without any ending) onto the sd card when connected to your laptop and then start it up on the RaspberryPi. This will activate the HDMI port and if you connect a HDMI monitor to the RaspberryPi it will show you the RaspiBlitz status screen containing the local IP address. + + diff --git a/README.md b/README.md index fb395a236..0a86fce63 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,17 @@ -![RaspiBlitz](pictures/raspilogo_400px.png) +![RaspiBlitz](pictures/raspilogo_tile_400px.png) *Build your own Lightning Node on a RaspberryPi with a nice Display.* -`Version 1.7.0RC2 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` +`Version 1.7.0 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg) -**The RaspiBlitz is a do-it-yourself Lightning Node based on LND running together with a Bitcoin-Fullnode on a RaspberryPi 3/4 - with an HDD/SSD and a nice display for easy setup & monitoring.** +**The RaspiBlitz is a do-it-yourself Lightning Node based on LND running together with a Bitcoin-Fullnode on a RaspberryPi (1TB SSD) and a nice display for easy setup & monitoring.** RaspiBlitz is mainly targeted for learning how to run your own node decentralized from home - because: Not your Node, Not your Rules. Discover & develop the growing ecosystem of the Lightning Network by becoming a full part of it. Build it as part of a [workshop](WORKSHOP.md) or as a weekend project yourself. ## Feature Overview -This is a quick look at the SSH main menu (once RaspiBlitz is SetUp): - -![MainMenu-A](pictures/mainmenu.png) - -As an alternative to the SSH menu, the "Ride the Lightning" (RTL) WebUI is available: - -![RTL-preview](pictures/RTL-dashboard.png) - There are further Services that can be switched on: * **Tor** (Run as Hidden Service) [details](https://en.wikipedia.org/wiki/Tor_(anonymity_network)#Onion_services) @@ -28,29 +20,26 @@ There are further Services that can be switched on: * **BTC-RPC-Explorer** (Bitcoin Blockchain Explorer) [details](https://github.com/janoside/btc-rpc-explorer) * **LNbits** (Lightning wallet/accounts System) [details](https://twitter.com/lnbits/status/1253700293440741377?s=20) * **SpecterDesktop** (Multisig Trezor, Ledger, COLDCARDwallet & Specter-DIY) [details](https://github.com/cryptoadvance/specter-desktop) [app connection guide](https://d11n.net/connect-specter-desktor-with-raspiblitz.html) -* **LNDmanage** (Advanced Channel Management CLI) [details](https://github.com/bitromortac/lndmanage) -* **Loop** (Submarine Swaps Service) [details](https://github.com/lightninglabs/loop/blob/master/README.md) -* **Pool** (Inbound Liquidity Marketplace) [details](https://github.com/lightninglabs/pool/blob/master/README.md) +* **Lightning Terminal (Loop, Pool & Faraday)** (Manage Channel Liquidity) [details](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) * **JoinMarket** (CoinJoin Service) [details](https://github.com/JoinMarket-Org/joinmarket-clientserver) * **ThunderHub** (Lightning Node Manager WebUI) [details](https://www.thunderhub.io/) -* **Faraday** (Channel Analysis & Recommendations CLI) [details](https://github.com/lightninglabs/faraday/blob/master/README.md) * **Balance Of Satoshis** (Commands for working with LND balances) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) * **Kindle Display** (Bitcoin Status Display made with a jailbroken Kindle) [details](https://github.com/dennisreimann/kindle-display) * **Stacking Sats Kraken** (Auto-DCA script) [details](https://github.com/dennisreimann/stacking-sats-kraken) * **Circuit Breaker** (Lighthing Channel Firewall) [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) * **PyBlock** (Python Util & Fun Scripts) [details](https://github.com/curly60e/pyblock/blob/master/README.md) * **Mempool Explorer** [details](https://github.com/mempool/mempool) -* **Sphinx Relay Server** [details](https://github.com/stakwork/sphinx-relay/blob/master/README.md) +* **Sphinx Chat Relay Server** [details](https://github.com/stakwork/sphinx-relay/blob/master/README.md) +* **Telegraf metrics** [details](https://github.com/rootzoll/raspiblitz/issues/1369) +* **Chantools** (Fund Rescue) [details](https://github.com/guggero/chantools/blob/master/README.md) You can connect the following Wallet-Apps to your RaspiBlitz: -* **Zap** (Android, iOS & Desktop) [details](https://zap.jackmallers.com/) * **Zeus** (Android & iOS-TestFlight) [details](https://zeusln.app) * **Fully Noded** (iOS) [details](https://apps.apple.com/us/app/fully-noded/id1436425586) * **SendMany** (Android) [details](https://github.com/fusion44/sendmany/blob/master/README.md) * **Sphinx Chat App** (Android & iOS) [details](https://sphinx.chat) - Also many more features like Touchscreen, Channels Autopilot, DynDNS, SSH-Tunneling, UPS Support, ... ## DeepDive Video (July 2020) @@ -63,6 +52,8 @@ The RaspiBlitz is optimized for being setup during a workshop at a hackday or co If you start at home ordering the parts from Amazon (see shopping list below) then it's a weekend project with a lot of downloading and syncing time where you can do other stuff while checking on the progress from time to time. +If you already run a Umbrel or myNode you have basically all the hardware needed and you can make the [Migration to RaspiBlitz from Umbrel/myNode](#make-a-raspiblitz-out-of-your-umbrel-or-mynode) under one hour. + ## Hardware Needed All parts together cost around 180-250 USD - based on shops and location. @@ -79,10 +70,6 @@ The cheapest way is to buy and assemble the single parts yourself. There are two *Please try to use the exact hardware models that are recommended in the shopping lists. We have had multiple reports where, for example, other SSD or SSD cases/controllers lead to problems. The idea of the shopping lists is to provide you the best tested hardware components that work together - improvement recommendations are always welcome.* -#### Package: Standard (around 250 USD) - -*The "Standard Package" is the most tested and recommended option if you can afford it. It aims to give you the best economic value to run all the RaspiBlitz features with good performance and even allows you to self-validate your blockchain in under 3 days.* - * RaspberryPi 4 4GB (or 8GB) [amazon referral link](https://geni.us/raspiblitz-4gb-new) * Power Supply - USB-C, 5V, >=3A [amazon referral link](https://geni.us/raspiblitz-ps) * 1TB SSD - SanDisk SSD Plus 1TB 2.5" : [amazon referral link](https://geni.us/raspiblitz-1000gb-san) *other 1TB SSD models might cause power issues* @@ -93,25 +80,6 @@ The cheapest way is to buy and assemble the single parts yourself. There are two *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* -#### Package: Minimal (around 180 USD) - -*The minimal package aims for the cheapest price and allows you to use old hardware. It will always be possible to run all the basic features of a Bitcoin- & Lightning-Fullnode, but the system might be too slow to validate the blockchain history by itself and run some resource intensive extended services.* - -Basic Parts: -* 1TB Hard Drive: [amazon referral link](https://geni.us/raspiblitz-hdd) -* Micro SD-Card 16GB: [amazon referral link](https://geni.us/raspiblitz-sd-card16gb) -* LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) - -When RaspberryPi 3 --> add following parts: -* RaspberryPi 3B+ : [amazon referral link](https://geni.us/raspiblitz-rpi3) -* Heatsink-Case for RPi3: [amazon referral link](https://geni.us/raspiblitz-heatsink) -* Powersupply microUSB, 5V, >=3A: [amazon referral link](https://geni.us/raspiblitz-3A-power) - -When RaspberryPi 4 2GB --> add following parts: -* RaspberryPi 4 2GB [amazon referral link](https://geni.us/raspiblitz-4-2gb) -* Power Supply - USB-C, 5V, >=3A [amazon referral link](https://geni.us/raspiblitz-ps) -* Heatsink Case for RPi4: [amazon referral link](https://geni.us/heatsink-raspi4) - [What other case options do I have?](FAQ.md#what-other-case-options-do-i-have) ## Assemble your RaspiBlitz @@ -119,7 +87,7 @@ When RaspberryPi 4 2GB --> add following parts: When you have all parts you need to: - Assemble the Heatsink-Case on the RaspberryPi (follow the instructions in package). -- Put the SSD/HDD into the Case and connect it per USB to the RaspberryPi +- Put the SSD/HDD into the Case and connect it per USB to the RaspberryPi (blue ports). - Add the display on top with the pins like in picture below. - Plug in the network cable. @@ -129,14 +97,14 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software -|Method|Build the sd card|Install the image| +|Method|Install the image|Build the sd card| |------|-----------------|-----------------| -|Philosophy|Sovereignty|Trust| -|Difficulty level|Medium|Easy| -|Pros|You don't need to trust us, build from your own forked repository|Make Blitz accessible to everyone| -|Cons|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs|You have to trust the mantainer image binaries| -|Instructions|[Build your own sd card image](https://github.com/rootzoll/raspiblitz/tree/master#build-the-sd-card-image)|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)| -|Verify what?|All of the code, don't trust, verify|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)| +|Philosophy|Trust|Sovereignty| +|Difficulty level|Easy|Medium| +|Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| +|Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: * SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 @@ -166,6 +134,8 @@ Insert the SD card and connect the power plug. When everything boots up correctly, you should see the local IP address of your RaspiBlitz on the LCD panel. +- [How do I find the IP address when running without a display?](FAQ.md#how-do-i-find-the-ip-address-when-running-without-a-display) + ![LCD0](pictures/lcd0-welcome.png) Now open up a terminal ([OSX](https://www.youtube.com/watch?v=5XgBd6rjuDQ)/[Win10](https://www.howtogeek.com/336775/how-to-enable-and-use-windows-10s-built-in-ssh-commands/)) and connect through SSH with the command displayed by the RaspiBlitz: @@ -200,12 +170,6 @@ If you are looking for a tutorial on how to organize a workshop to build the Ras ### Init -Automatically after login via SSH as admin to the RaspiBlitz, it will run a hardware test. - -![HardwareTest](pictures/hardwaretest.png) - -If you see a warning there, please read carefully, because a lot of things that go wrong later (errors and even loss of funds) relate to problems with the hardware. If you get an OK here ... you are good to go :) - In the beginning you can choose how to setup your RaspiBlitz, by running on Bitcoin or Litecoin with Lightning. This is also the point where you can import a Migration file from an older RaspiBlitz - read about Migration [further down](README.md#import-a-migration-file). The default choice here is Bitcoin. ![SSH0](pictures/ssh0-welcome2.png) @@ -238,16 +202,6 @@ Then the user is asked to enter the Password B - this is internally used for the *The other passwords C & D will be needed later on. They will be used during the lightning wallet setup.* -### Running behind Tor - -On setup you can now decide if you want to run your RaspiBlitz behind Tor or make your IP public to the Lightning Network. - -![TOR](pictures/chooseTOR.png) - -Your IP can reveal your location (at least to a certain radius) to everyone and your internet provider has a record of your personal identity tied to your IP. When you choose to run behind the Tor network this personal data is much better protected. But running behind Tor reduces speed and might make it more difficult to connect to you for other nodes or pairing other devices and apps to it. - -You can switch Tor off later on. You can also switch Tor on after the setup, but keep in mind that once your node is running, your lightning node id can be connected to your public IP. - After this the setup process will need some time and the user will see a lot of console outputs - just wait until it's finished: ![SSH4](pictures/ssh4-scripts.png) @@ -378,7 +332,7 @@ If you now login by SSH in your RaspiBlitz (or you are still logged in) you will ![SSH9e1](pictures/mainmenu.png) -And if you scroll down .. you see even more options. All options on the main menu will be explained below in the feature documentation. +All options on the main menu will be explained below in the feature documentation. *OK .. so from here on out, your RaspiBlitz is ready to play with.* @@ -414,7 +368,11 @@ This is the screen that gets displayed on the LCD/display. It's useful to call i * [Why is my node address on the display red?](FAQ.md#why-is-my-node-address-on-the-display-red) * [Why is my node address on the display yellow (not green)?](FAQ.md#why-is-my-node-address-on-the-display-yellow-not-green) -#### FUNDING: Fund your on-chain Wallet +#### LIGHTNING (Basic Node Management) + +Under `LIGHTNING` you find some basic steps to manage your Lightning node. Those are very simplyfied in the RaspiBlitz SSH menu for the reason of learning. For more advanced management of your Lightning node see addtional apps under 'SERVICES'. + +##### FUNDING: Fund your on-chain Wallet Before you can open channels with other nodes you need to put some coins in your LND on-chain wallet. Use this option to generate an address to send funds to. @@ -422,13 +380,13 @@ Before you can open channels with other nodes you need to put some coins in your You can fund it multiple times - starting with small amounts first to test. LND will always generate a different address, but all funds you send will get into the same LND on-chain wallet. -#### CONNECT: Connect to a Peer +##### CONNECT: Connect to a Peer Before you can open a channel with another node on the network, you need to connect this node as a peer to your node. Opening a channel with a peer is just optional. Having another node as peer helps your node to receive information about the network through the gossip protocol. It will help your node to find better routes through the network. -#### CHANNEL: Open a Channel with Peer +##### CHANNEL: Open a Channel with Peer To open a payment channel with another node, you can use this option. @@ -438,7 +396,7 @@ Bear in mind that this option will open a public channel that can be seen by eve *This is just a very basic shell script. For more usability, try the RTL Webinterface (under Services) or connect a (mobile) wallet with your RaspiBlitz.* -#### SEND: Pay an Invoice/PaymentRequest +##### SEND: Pay an Invoice/PaymentRequest Pay an invoice through lightning. @@ -446,24 +404,12 @@ Pay an invoice through lightning. If you are looking for something to test payments with Lightning ... why not [donate some satoshis to RaspiBlitz development](https://tallyco.in/s/r5lx23/)? Thanks :) -#### RECEIVE: Create Invoice/PaymentRequest +##### RECEIVE: Create Invoice/PaymentRequest Create an invoice to send to someone for a service to be paid through lightning. *This is just a very basic shell script. For more usability try the RTL Webinterface (under Services) or connect a (mobile) wallet with your RaspiBlitz.* -#### CLOSE ALL: Closing all open Channels - -*This option is just available if you have channels open.* - -With this feature you can close down all open channels and get the funds locked up in those channels back to your on-chain wallet. - -You may choose to force-close some channels where the channel partner is no longer reachable. Keep in mind that when you force-close a channel, it can take a much longer time until your funds are available again through your on-chain wallet. - -#### CASHOUT: Remove Funds from on-chain Wallet - -Use if you want to remove all funds from the RaspiBlitz. - #### lnbalance: Detailed Wallet Balances bonus-lnbalance @@ -478,6 +424,22 @@ If you connected your node well within the Lightning Network you can become a "R Beware - earning fees as a routing node does not come automatic. It's a bit of hard work of building the right channels to be attractive for other people to route thru. Check the internet for tutorials or use tools like "lndmanage" (see under RaspiBlitz SERVICES) to help you analyse and optimize your channel management. +##### NAME: Change name of your Node + +Here you can change the alias name of your node as it is shown as part of the Lightning network. + +##### CLOSE ALL: Closing all open Channels + +*This option is just available if you have channels open.* + +With this feature you can close down all open channels and get the funds locked up in those channels back to your on-chain wallet. + +You may choose to force-close some channels where the channel partner is no longer reachable. Keep in mind that when you force-close a channel, it can take a much longer time until your funds are available again through your on-chain wallet. + +##### CASHOUT: Remove Funds from on-chain Wallet + +Use if you want to remove all funds from the RaspiBlitz. + #### SETTINGS: Basic Settings of RaspiBlitz Here you will find basic settings for your RaspiBlitz: @@ -555,6 +517,10 @@ Have fun. IMPORTANT: Presently BTCPay Server service is NOT supported on TESTNET (RPC connection error messages). Until this [issue #1724](https://github.com/rootzoll/raspiblitz/issues/1724) is resolved you can [play around with BTCPay Server on TESTNET](https://testnet.demo.btcpayserver.org) +##### Circuitbreaker (LND Firewall) + +Not everybody is acting friendly in the Lightning network. Circuitbreaker is a background service you cann activate that acts similar to a firewall to protect your now better. For details see: https://github.com/lightningequipment/circuitbreaker/blob/master/README.md + ##### LND Auto-Unlock The RaspiBlitz will automatically unlock the LND wallet upon every start. @@ -585,21 +551,21 @@ The RaspiBlitz offers further Services, Apps and configuration (scroll down to s Activate/Deactivate service selection with the space bar and then select 'OK' to trigger Install/Uninstall. You can find more details about those options below (top to bottom): -##### Lightning Loop +##### Electrum Rust Server -A Submarine Swaps Service by lighting labs. You call it from the RaspiBlitz terminal with the command 'loop' - if you have the RTL service installed (see below), then loop will also be available as part of the RTL web interface. You can use Loop for example to send satoshies from one of your channels to an on-chain bitcoin address without closing the channel for a fee. This can be use full to send earned satoshies to your hardware wallet while freeing up your inbound liquidity on your channels again. +Enables a user to run his own Electrum server on the RaspiBlitz. The server indexes the entire Bitcoin blockchain saved locally on your HDD/SSD, and the resulting index enables fast queries for any given user wallet, allowing the user to keep real-time track of his balances and his transaction history using the [Electrum wallet](https://electrum.org). -[Details on Service](https://github.com/lightninglabs/loop) +Since Electrum Rust Server runs on the user's own machine, there is no need for the wallet to communicate with external Electrum servers, thus preserving the privacy of addresses and balances. -After install, you will see a new `LOOP` option in the SSH main menu - it will give you all the information you need to start using it. +By contrast, if you use your Trezor Hardware Wallet with the trezor.io wallet, it will tell their third party server your public keys - connecting it with your IP. Now you can use your Trezor with the Electrum Wallet, just talking to your own Electrum Server, preserving your privacy. -##### Lightning Pool +Learn how you can use Electrum with your own Server over Tor: -Lightning Pool is a non-custodial, peer-to-peer marketplace that allows node operators that need inbound liquidity to pay node operators with available capital to open channels in their direction while retaining full custody of their funds. Pool’s first product is a Lightning Channel Lease - an inbound channel with a pre-agreed duration. +Video Tutorial
--watch--> https://www.youtube.com/watch?v=AiosKK_TA7w -[Details on Service](https://github.com/lightninglabs/pool) +[More Details on Service](https://github.com/romanz/electrs) -After install, you will see a new `POOL` option in the SSH main menu - it will give you all the information you need to start using it. +After install, you will see a new `ELECTRS` option in the SSH main menu - it will give you all the information you need to start using it. ##### RTL Webinterface @@ -617,6 +583,52 @@ Feedback is welcome by the RTL programmer: https://github.com/ShahanaFarooqui/RT After install, you will see a new `RTL` option in the SSH main menu - it will give you all the information you need to start using it. +##### ThunderHub + +A Lightning Node Manager WebUI - similar to RTL. + +[Details on Service](https://www.thunderhub.io) + +After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. + +##### Lightning Terminal (LIT) with loop, pool & faraday + +Lightning Terminal (LiT) is a browser-based interface for managing channel liquidity. It bundles the former single tools called loop, pool & faraday with an easy to use browser interface. + +![LIT](pictures/lit.png) + +[Details on Service](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) + +After install, you will see a new `LIT` option in the SSH main menu - it will give you all the information you need to start using it. + +##### BTCPayServer + +[BTCPay Server](https://github.com/btcpayserver) is a self-hosted, open-source cryptocurrency payment processor. It's secure, private, censorship-resistant and free. + +![BTCPAY](pictures/btcpay.png) + +Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ + +After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. + +##### LNbits + +LNbits is a very simple server that sits on top of your Lightning Wallet. + +![LNBITS](pictures/lnbits.png) + +It can be used together with IP2Tor to provide: +- Lightning Paper Vouchers (Plugin: LNURLw) +- Merchant Onboarding (Plugin: TPOS) + +Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw + +You can also develop your own extensions on it. + +[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) + +After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. + ##### BTC-RPC-Explorer BTC-RPC-Explorer is a blockchain explorer website you can run on your own RaspiBlitz. See an example running on: https://btc-explorer.com @@ -637,98 +649,15 @@ The goal of SpecterDesktop is to make a convenient and user-friendly GUI around After install, you will see a new `SPECTER` option in the SSH main menu - it will give you all the information you need to start using it. -##### Electrum Rust Server +##### Mempool Explorer -Enables a user to run his own Electrum server on the RaspiBlitz. The server indexes the entire Bitcoin blockchain saved locally on your HDD/SSD, and the resulting index enables fast queries for any given user wallet, allowing the user to keep real-time track of his balances and his transaction history using the [Electrum wallet](https://electrum.org). +![MEMPOOL](pictures/mempool.png) -Since Electrum Rust Server runs on the user's own machine, there is no need for the wallet to communicate with external Electrum servers, thus preserving the privacy of addresses and balances. +Mempool is the fully featured visualizer, explorer, and API service running on mempool.space -By contrast, if you use your Trezor Hardware Wallet with the trezor.io wallet, it will tell their third party server your public keys - connecting it with your IP. Now you can use your Trezor with the Electrum Wallet, just talking to your own Electrum Server, preserving your privacy. +[Details on Service](https://github.com/mempool/mempool) -Learn how you can use Electrum with your own Server over Tor: - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=AiosKK_TA7w - -[More Details on Service](https://github.com/romanz/electrs) - -After install, you will see a new `ELECTRS` option in the SSH main menu - it will give you all the information you need to start using it. - -##### BTCPayServer - -[BTCPay Server](https://github.com/btcpayserver) is a self-hosted, open-source cryptocurrency payment processor. It's secure, private, censorship-resistant and free. - -![BTCPAY](pictures/btcpay.png) - -Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ - -After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. - -##### LNDmanage - -lndmanage is a command line tool for advanced channel management of a node. - -*You need at least one open channel to use this tool.* - -To run it, change to the RaspiBlitz terminal and type 'manage'. This starts the LNDManage interactive mode and you can use the following commands: - -* __Activity reports ```report```__ -* __Display the node summary ```status```__ -* __Advanced channel listings ```listchannels```__ - * ```listchannels rebalance```: list channels for rebalancing - * ```listchannels forwardings```: list forwarding statistics for each channel - * ```listchannels hygiene```: information for closing active channels - * ```listchannels inactive```: information on inactive channels -* __Rebalancing command ```rebalance```__ - * different rebalancing strategies can be chosen - * a target 'balancedness' can be specified (e.g. to empty the channel) -* __Circular self-payments ```circle```__ -* __Recommendation of good nodes ```recommend-nodes```__ - -[Details on Service](https://github.com/bitromortac/lndmanage/blob/master/README.md) - -After install, you will see a new `LNDMANAGE` option in the SSH main menu - it will give you all the information you need to start using it. - -##### Faraday - -Faraday is a Channel Analysis & Recommendations CLI that can help you with channel management. - -[Details on Service](https://github.com/lightninglabs/faraday/blob/master/README.md) - -After install, you will see a new `FARADAY` option in the SSH main menu - it will give you all the information you need to start using it. - -##### Balance of Satoshi - -Balance of Satoshi gives you enhanced commands for working with LND balances. - -[Details on Service](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) - -After install, you will see a new `BOS` option in the SSH main menu - it will give you all the information you need to start using it. - -##### ThunderHub - -A Lightning Node Manager WebUI - similar to RTL. - -[Details on Service](https://www.thunderhub.io) - -After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. - -##### LNbits - -LNbits is a very simple server that sits on top of your Lightning Wallet. - -![LNBITS](pictures/lnbits.png) - -It can be used together with IP2Tor to provide: -- Lightning Paper Vouchers (Plugin: LNURLw) -- Merchant Onboarding (Plugin: TPOS) - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw - -You can also develop your own extensions on it. - -[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) - -After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. +After install, you will see a new `MEMPOOL` option in the SSH main menu - it will give you all the information you need to start using it. ##### JoinMarket @@ -742,17 +671,13 @@ For more details see [here](https://github.com/JoinMarket-Org/joinmarket-clients After install, you will see a new `JMARKET` option in the SSH main menu - it will give you all the information you need to start using it. -##### Circuit Breaker +##### Balance of Satoshi -https://github.com/lightningequipment/circuitbreaker/blob/master/README.md +Balance of Satoshi gives you enhanced commands for working with LND balances. -##### PyBlock +[Details on Service](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) -https://github.com/curly60e/pyblock/blob/master/README.md - -##### Mempool Explorer - -https://github.com/mempool/mempool +After install, you will see a new `BOS` option in the SSH main menu - it will give you all the information you need to start using it. ##### Sphinx Relay Server @@ -762,6 +687,86 @@ The Sphinx App allows chat over the Lightning Network and ties into the idea of After install, you will see a new `SPHINX` option in the SSH main menu - it will give you all the information you need to start using it. +##### PyBlock + +![PYBLOCK](pictures/pyblock.png) + +https://github.com/curly60e/pyblock/blob/master/README.md + +##### Channel Tools (chantools) + +This tool provides helper functions that can be used to rescue funds locked in lnd channels in case lnd itself cannot run properly anymore. + +https://github.com/curly60e/pyblock/blob/master/README.md + +##### Download Bitcoin Whitepaper + +Extract the original Bitcoin Whitepaper as PDF directly from the blockchain of your node. + +#### SYSTEM: Monitoring & Configuration + +![SYSTEM](pictures/system.png) + +#### CONNECT: Connect Apps & Credentials + +This feature should support connecting your RaspiBlitz to a mobile wallets or other apps. + +![CONNECT](pictures/connect.png) + +##### MOBILE: Mobile Wallet Apps (Smartphone) + +At the moment, the following mobile wallets are supported: + +* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) +* [Fully Noded (iOS over Tor)](https://apps.apple.com/us/app/fully-noded/id1436425586) +* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) +* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) + +Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). + +##### BTCPAY: Get the connection string for the BTCPay Server + +To connect the payment processing BTCPay server to your Lightning node you find here the needed Connection string. + +##### bitcoinRPC + +If apps need access to the Bitcoin RPC service you can find this here. + +##### BISQ: Use your node with BISQ + +Here you can activate a hidden service for your bitcoin node so that it can be used for the decentral exchange called BISQ. + +##### EXPORT: Macaroons and TLS.cert + +If you want to access your LND APIs (to connect apps and additional services) you need credential files that grant access (Macaroons & the TLS cert). + +*Macaroons: Access Tokens that allow certain command executions on the LND node.* +*TLS: Certificate to secure/encrypt communication with the LND node.* + +In this menu, you can reset, re-sync, or export them as a file or string so that you can import them to apps and additional services. + +Here are the following export options to get the Macaroon and TLS files to be used in other apps and wallets: + +###### SSH Download + +SCP is a SSH like command to transfer files. If we're able to SSH into the RaspiBlitz, also the SCP to transfer the files should work. If you choose this option, RaspiBlitz will print prepared SCP commands you can copy+paste to run in a second terminal. + +This method is recommended to export to: +* [Zap Desktop Wallet](https://github.com/LN-Zap/zap-desktop) + +###### Browser download + +Opens an ad-hoc webserver so that you can download the files in your local network through the browser. + +*This is the least secure way to transfer those files - everybody in your local network has access to those file during download. Remember with the Admin-Macaroon somebody could takeover your node and spend all your funds. Just use as last fallback.* + +####### Hex-String + +The Macaroons and TLS.cert files can be copy+pasted as Hex-Strings from RaspiBlitz to any other app that supports that format. If you choose this option, RaspiBlitz will print all the files for you as Hex-String to do so. + +This method is recommended to export to: +* [Joule Browser Wallet](https://lightningjoule.com) + #### SUBSCRIBE: Subscription Services The RaspiBlitz offers now also Subscriptions .. those are free or paid third-party services. @@ -796,62 +801,6 @@ When you create a new LetsEncrypt subscription, you will be asked for your subdo To try out the IP2TOR tunnel, go into `MAINMENU` and the extra menu point of the Service you want to use the bridge for. It should give you an updated URL to call your service. -#### MOBILE: Connect Mobile Wallet - -This feature should support connecting your RaspiBlitz to a mobile wallet on your smartphone. - -mobile-wallets - -At the moment, the following mobile wallets are supported: - -* [ZAP (iOS/Android)](https://github.com/LN-Zap/zap-iOS) -* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) -* [Fully Noded (iOS over Tor)](https://apps.apple.com/us/app/fully-noded/id1436425586) -* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) -* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) - -Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). - -There is a special video on how to connect the Zeus app thru Tor: - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=XStiTJosklY - - -#### LNDCREDS: Macaroons and TLS.cert - -If you want to access your LND APIs (to connect apps and additional services) you need credential files that grant access (Macaroons & the TLS cert). - -*Macaroons: Access Tokens that allow certain command executions on the LND node.* -*TLS: Certificate to secure/encrypt communication with the LND node.* - -In this menu, you can reset, re-sync, or export them as a file or string so that you can import them to apps and additional services. - -Here are the following export options to get the Macaroon and TLS files to be used in other apps and wallets: - -##### Hex-String - -The Macaroons and TLS.cert files can be copy+pasted as Hex-Strings from RaspiBlitz to any other app that supports that format. If you choose this option, RaspiBlitz will print all the files for you as Hex-String to do so. - -This method is recommended to export to: -* [Joule Browser Wallet](https://lightningjoule.com) - -##### SSH Download - -SCP is a SSH like command to transfer files. If we're able to SSH into the RaspiBlitz, also the SCP to transfer the files should work. If you choose this option, RaspiBlitz will print prepared SCP commands you can copy+paste to run in a second terminal. - -This method is recommended to export to: -* [Zap Desktop Wallet](https://github.com/LN-Zap/zap-desktop) - -##### Browser download - -Opens an ad-hoc webserver so that you can download the files in your local network through the browser. - -*This is the least secure way to transfer those files - everybody in your local network has access to those file during download. Remember with the Admin-Macaroon somebody could takeover your node and spend all your funds. Just use as last fallback.* - -#### NAME: Change Name/Alias of Node - -Change the name of your node. - #### PASSWORD: Change Passwords Change your passwords for security. @@ -931,25 +880,29 @@ If you had the Bitcoin Transaction Index activated you can use this option to ma The `UPDATE` menu gives you options to update your RaspiBlitz -![UpdateMenu](pictures/updatemenu.png) +![UpdateMenu](pictures/update.png) The options are explained in detail: *Please note that the RaspiBlitz does not support Auto-Update, to ensure that there is no remote control of your node from a central server.* -#### RELEASE: Update RaspiBlitz to a new Version +##### RELEASE: Update RaspiBlitz to a new Version This is common way to update your RaspiBlitz. Choose this option to prepare your RaspiBlitz for a new SD card image containing the new version release. -#### LND: Interim LND Update +##### PATCH: Patch RaspiBlitz code + +With Patching you have now an easy way to sync your RaspiBlitz code/scripts with the official RaspiBlitz GitHub Repo or even your own forked GitHub Repo. This is an option for people that report bugs and we like to offer them a quick script update (patch) between RaspiBlitz releases or for people who want to develolp on the RaspiBlitz and sync code between their IDE, forked GitHub and their RaspiBlitz. + +##### LND: Interim LND Update Sometimes there is a new LND release that has some breaking changes that once you updated the LND database cannot be reversed (like the update from 0.9.2 to 0.10.0). Then RaspiBlitz offers you an optional update ... this is where you then can update LND. If you choose this you get the option to do this `VERIFIED` that means it offers you the optional LND update we tested the RaspiBlitz with or `RECKLESS` which will just grab the latest LND release from the GitHub releases page (also Release Candidates) and install it with no further guarantees and verification checks - this is for people that run nodes to test new releases and how they work with existing RaspiBlitz apps. -#### PATCH: Patch RaspiBlitz code +##### BITCOIN: Interim Bitcoin Update -With Patching you have now an easy way to sync your RaspiBlitz code/scripts with the official RaspiBlitz GitHub Repo or even your own forked GitHub Repo. This is an option for people that report bugs and we like to offer them a quick script update (patch) between RaspiBlitz releases or for people who want to develolp on the RaspiBlitz and sync code between their IDE, forked GitHub and their RaspiBlitz. +Like with LND you have the possiblity to upadte the bitcoin core version here. #### REBOOT: Reboot RaspiBlitz @@ -993,6 +946,34 @@ RaspiBlitz will reboot and start the normal recovery process to install all the Then the blockchain needs to sync up and you should be back to normal. +## Make a RaspiBlitz out of your Umbrel or MyNode + +Another kind of migration is when you already run an full node with the Umbrel or myNode software and you like to change it to RaspiBlitz without closing channels. You basically have all the hardware needed and just need to change software. You dont need the [LCD from the shopping list](#amazon-shopping-list-buy-parts--build-it-yourself) - RaspiBlitz can also run without an LCD. + +*NOTE: This migration is still expirimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* + +Before you start migration: +* if you have on-chain funds on your old node - make sure to have the backup seed words +* if you have lightning channels open on your old node - make sure to have downloaded the latest Static Channel Backup file to your laptop + +Also be aware that at the moment RaspiBlitz can only transfere your blockchain and LND wallet data (including channels) over to RaspiBlitz. Any data/pairing of additional apps cannot be transfered and may get lost. + +Instructions for Migration: +* shutdown your old node +* remove the sd card +* [download the latest Raspiblitz sd card image & flash it to your sd card](#downloading-the-software) +* if you like to use a HDMI monitor for status & progress, create a empty file called `hdmi` (withot any ending) on the sd card while connected to your laptop +* [insert sd card, boot up & login per SSH](#boot-your-raspiblitz) + +Now RaspiBlitz should show you that old data from your node was detected and offer you todo the migration. + +* If you continue it will prepare the data & reboot. +* The RaspiBlitz recover/update modus is starting - that will take a while and finally reboot. +* Login per SSH as before and reset the passwords (`FINAL RECOVERY LOGIN` on LCD). Then a final reboot will happen. +* Login per SSH with your new password A & unlock LND wallet with password C. Now blockchain needs to catch up and then your RaspiBlitz should be ready and show you (under INFO) your on-chain & channel balance. + +If you dont have an LCD or HDMI monitor connectec it might be a bit difficult to see what state your RaspiBlitz is in. Just (re-)try to login per SSH again after the reboots (might always take some time until it reacts). + ## Interface / APIs To develop your own scripts/apps and connect other services/apps to your RaspiBlitz, you have multiple interfaces/APIs available: @@ -1106,7 +1087,7 @@ If done successfully, simply put the SD card into the RaspiBlitz and power on ag A ready-to-use SD card image of RaspiBlitz is provided by us for download, to get everybody started quickly (see above). But if you want to build that image yourself - here is a quick guide: -* Get a fresh RaspiOS 64-bit: [DOWNLOAD](https://downloads.raspberrypi.org/raspios_arm64/images). +* Get a latest RaspiOS 64-bit: [DOWNLOAD](https://downloads.raspberrypi.org/raspios_arm64/images). * Write the image to an SD card: [TUTORIAL](https://www.raspberrypi.org/documentation/installation/installing-images/README.md). * Add a file called `ssh` to the root of the SD card when mounted on your laptop to enable SSH login. * Start the card on a Raspi and login via SSH with `ssh pi@[IP-OF-YOUR-RASPI]`. Password is `raspberry`. diff --git a/SECURITY.md b/SECURITY.md index bba6f56de..c30f8cc58 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,10 +1,20 @@ # Security Policy +*NOTE: This document is just a first draft and still under contruction.* + +Only use this software with funds you could afford to lose. Especially a lightning wallet is a hot wallet that has a constant connection to the internet and can be target of exploitation. + +Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps the RaspiBlitz team cannot review all the code of those external projects. + +The software is provided "AS IS", without warrenty of any kind. In no event shall the +authors or copyright holders be liable for any claim, damages or other +liability. [details on legal license](LICENSE.md) + ## Supported Versions Updates are made only for the latest version. -Security patches can be done with `Menu > Patch` for the current branch in the case of a high risk issue before next release. +Security patches can be done with `MAINMENU > UPDATE > PATCH` for the current branch in the case of a high risk issue before next release. The latest version always have the `latest` tag. To make sure you are using the lastest version, run: ``` @@ -30,11 +40,34 @@ curl https://keybase.io/oms/pgp_keys.asc | gpg --import Ensure that you put quotes around fingerprints containing spaces if importing with other methods. # Online Security + * Wi-fi and Bluetooth is disabled by default in the build script. * UFW is active and only specific ports are open, closing ports and removing hidden services when services are uninstalled. +* Fail-2-Ban is protecting the SSH login against brute-force-attacks. * Admin (and Joinmarket [optional]) users have passwordless sudo access to be able to perform installations and read password without much user interaction. # Physical Security -* All wallets and user interfaces are password protected so this has more privacy implications (in the case of physical theft) than security. + +* The lightning wallet and user interfaces are password protected by default so this has more privacy implications (in the case of physical theft) than security. * Optional log in through SSH using a hardware wallet. * LUKS encryption would be welcome in the future. + +# On-chain Funds + +Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz. + +## Lightning Wallet (default) + +The default is the on-chain lightning wallet - thats the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. + +## Bitcoin Core Wallet (deactivated by default) + +Beside lightning you have a bitcoin core installed. Normally bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. + +Some apps (like Fully Noded or JoinMarket) activate the bitcoin core wallet and use it for their own needs. This on-chain balance will not be reflected in the rest of the RaspiBlitz software and is NOT backuped by the seed words from the RaspiBlitz setup. If you make use of the bitcoin core wallet please take care of these funds. + +# Off-chain Funds (Lightning Channels) + +Please note that there is no perfect backup concept for the funds in your lightning channels yet. We recommend strongly to use the `Static Channel Backup` provided by LND and consider off-loctaion backup of that file to have the best chances to recover Lightning funds in a case desaster recovery. + +For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) \ No newline at end of file diff --git a/pictures/connect.png b/pictures/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..2e655c406733d4746a3d4c4b7d691df2f9145877 GIT binary patch literal 78698 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%0D4(< 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%0DUx;PMx^D2+ZS&2PxF!K42rkot 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 R!)2SyPFsFk@r`@JKLJAdzK;L^ literal 61026 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%0A1zY^ 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%0Dp~eNY ztco}QFbSCD&{4+|xc?3ezqMG~0ifB8p!x-jow%m-n?TAZ9nfiJ4U!5vYM2`BE3N$~ zU~eH?ZZ{e4fO~+nH?CWtq}P_MLi2)%w*Ze}2*g49brreAHB&Vwz&OX9u1!AW}{^ytU<6Iq@ZwD6lC#LDfR`p9XGwRUgnC zQeRLbW-!B#Tx!gC5H;VyaZsM>E+u4|f zG``#-wRUn3jI%82C(41w8I<#IC_@_hgLi(_wmzmEi@~eZ=bmbR<|=VWy&bz5zEIi* zINrbip&aSgVQ9d_b>pt!`>>`gYuiSvSLJDlc+@=u$BJU04Hn51u+wgPPdj{IGM2a? z^>_Bxs^>>|+#AG8?`~SP>&v;ULrUuEkm<^lE*4F<7`>xVk_ZCJqJtk`3@qZW*{MHr z9Ip9CImhFk;LXK;)w5QsDAb1@^^J|BphLA#;^3ToUB!)Jto)HNQeb|4yeVuopO{r8 zrgLH8qC$8X_u7KrKF&7w>TqMB@qFR))m3Bv(0)CXSbN%Qbrdvf-wrUU+-7}8oJP5Jac-UNiQK(9Ih{tKC+?l=i@*hj(1!*T zpkh*(-xvuKdE0FoDzGce@=G6_hx%1w8-CC>j8yJ72C>V2831<6bt-|{DG4qq zFU-@!lus$DT_7%R6^e^19@HwnAogvOu7F@ZJ@Q~aE_;NFp~ACe=?~?{U={H*JX$Pz|! zOFdY#Wyw^C{W~&jV%yNL`xT3%uVk-bwN+x-+{sX{1KP@wqTkj}KhrRc7Xsdw zOw*|8X3Z0U0z989WT}nj2t0MtiUpUygGqFdSEW^ziv|$4Un7kr<~dM^+of6-eSwSr zenYp~;#ZHiSk96y6$h4!BkB~-b=`f;=e10j(fu(6LC1gM8O0_(z4@NW#IapuOtOId zwP1bq&8}x!jBvO4`%g81^fe+{4c^H7d77o1PVmrD0 z%%Jsc7GO~o@9UT8%}I&GjEh>YA(dy7j>4_E&V~1-geSIZY zoJ}(fRa_n79&pNo=zcpi`e_G>Z&bcJjPbb8nnWNv;csUYF2fmKVre{vw>H7K_RM#N z7D&9%E>h`pdrOwxs7@ZlP8$^AS$xKjpbAySL$&?5_NWZ6hYJ0`=c%ce$@K2u!ZY3P zO?y|1lPS5D}s<*zjkh(u;Fd83s?5rLS1}hp<`|z46=|?sN+^q$( zlxJ<(CCqNm1TW8*uf^lNu6i$q2G4pXp+?pn<>0$9Wwd;y9 z<~A1%9ym@md&ivB-?%WP#Rh2SDC5?G`B6ki; zORoKQwcW;laB?INsmUFjS_+q+(VQ)|vWl#^rx3|D4pUQV>iZgv?=6f&GS{~uTNg-Q z67T}IT2NR|%y4{}RgVl8n`Fn_wmbbO_dEUGAFoBHNaSG@pU7NMn3)S4W^z@Iew4Fx zvFnj<3<|Y$7^~CvL zdmH+OmfdnL@BX-UzkCC6=l9(gYu3G>*fBaP_8z5k3QAt^4BQ z?6Da4!W8QT=KAQZmR<+I?DQ+S8PY|I-K&Xvn(=H*tYj2WNmbza?%y1;j!#LXGbMO5 zzDiS49ccDQCRg=UuESA*-mPk=Ko=?F6hfpS;#BEgz6AIY`1NB@wQ#Y11G&TS2?8uD6k>fu{456|lH5J^U5qB;Zg#f9Ai3KLP< ziOjY~BQxmM$SOIPH!rT)Y_0GEf?o8?w7tM)_<5>2NEOz7;Q@EpT)1N+H12+nHcc=3 z4EXz_Rg|Ct%g9{lWh9fm@duj&IHlY$D)Kh`9CUtQO71V=&FWRFsjIF~{rOCq({kX< z1GuEb2R-H>3flDw&pg~Bn8@|EtlswPHaD$rYq|uq-g^DI^luC?HUW81#!i_K zqB7G4By~SvgsnD3NgcfankWEFBE4d;^NhZF;`4u`LuVO52@`qv$W%cV zzQPczbQw-p-D+hV$v6NZxv^5I>R6qhAOiwnxj0K{dwlWoqQlp~I_l!H%45T^LYG zjh(|O2BCm3Rf#XlmnV7A-2IwzDMXT;W?#pn;Z@LtCj--m*kFbTPGz5S2ic5W$*9;K zM)%c4vEa;~_0LRBjptSCXT439Bp2D^q$`rUd)sAStsw}9j(6x(z$_D9Payfn1dfg! zG4pNpvQFqfpn?QTp}7R*IV4kq=1bfVbmEMlNoz}B6YaCHD@|{3W+1Am{%a%DmhSRq z7J~Z8vK~vez*VGqCr)l|uK2QwRCkKQ#XqP8;kPWaNuPeL0|&y^UwK4R3#rkZ<|avV z%r8ZB#Nd8{NiuQ9*}v4X2y1*W@Z{bRe%yX%z7h{@GJE!Y<*3X7^!5W0)s_YJf?yA$ z^V+jcl3_41@8wa+Ff;*K+NCP`JKeU>x;)18eU!2q>z9sL<`$X7XR6yaCPOne=F9o$qS{a{v)nssCDnl>fc zuQgVpo~z*L(>k7P*{y@J{5Ll7?#u^4>>?zti@6T-B4ldYKR5H@)yWxo9Ajncr}apE z>GFe2$rU0FPu66WG{mn=))HXuz$3*o|4mX@-sJEeh=dvjsLNO?!1a$PevLU+p2KX? zycwtK%RufSV0J9s`$iDeR}vDeM-$65heB-{0|LZ*gM{n0)6b&1Yy$hxKb@Wy%8+Zu zh?5Ng^1y>zf*>*x-Vr?`nF6D0JJm>3x&;0Ka8nF>4`xVH-OIVNxJ<4Z_{Uxy8$6Sr zQFs)ZX_JUCt0biJ1RIX`CSul^N#84iyp5r?uJ~eOz5Wc<)thPnS#;u$wq1T%wB&^8 zhg7mBH-bo=HIeCtl!PW<#~u%)9jas?U7B&|N_ROv^Y%Pc!Vha#OjY6v>jWuWXJ{5Z z>nm0l`sM*#_rr%g!9i>5PFqWEM&rfvC>;NsBE?%`4W8w4ICkbjVlSR@D;)hnTc#=)I)ojViN^V;+HWUQDypZ_$rwiPzdg6 z3^ok+AYz&6fa;PKb0HtQGMCG8Bvy_ZL2SlFg9 z>L8U&MRZmZ4)TnEJ+`S~!{muq=&}!dzBtS_q{)0ouz!PH_s3gQV)pD_k^0~}X$G}e z+V-B$#f0q?*ptN(lv$q}naM5IgjzqF?pK={Dq2QLk@M}#(Ne%r|FtC~f&-hL3`_>_tPdUwWxf?tH2(A;($yUyP0F9D>`!|VK_0Y@!>&%^P7 zxo_D0J<~?V)#Xo;l@p3?$WMtQ{4l&0+293k&ozXe0S!8K{gHyFjwx!xp(o7}2& z-NDf*p_WuzCrnd3g+lbbi+S6VUjY&d&d#IeKj&e2onwe-ye>EWPCJrxc%MlxwDw*4qlMQOI2ecciS@n+)Pt0QR=Mr=Avtj>o0SH zy~XOI$#Dmq-MJ|}=%YG2>~ zc56V0gUX+YB?j;M>_z5)e8?#K)kg5>q8T9tbFDuoxm8Qf$UW) z=C}L1Uot&@JHVMUt<=wxDwjHG$&8P2-H8}SK9OI2zO$Zo=6FfnN}lf)b?oH+D1t;i z8+P~FTUb7NO)3-FGyCYyz9RZ-x-3?0H8YO+>km_FSerN!p2g~n3(?OQX_k8MbK(~t zs%Qc@8x^=) z6$mQ&>5#))?zt-Qg1zSSefm`TQGX?a$5KoZ!l`%fp=94Rmq_cVhM11Nc?(l5-&1$$ z?O*?PRVG;f(`NG;e!<$8-%R#-)n-)#qx)%YyDb*-cpBF(Z1t z+VtXDFl#Y=%&1Ff!s4&CDW9Lw%}q$w!umulG*9evqfxcWQ`u^TznwSpU-v1K?;dVb zXjk59pf0B7uyoGMh8qAv1gro=#6jZ(C7mUh`A?9!w^`JR& z@P_{CPk%k@y*W~!?sa%ib!4M|rM|Exd~uWPz2CKQAv^2(NiFG%N203xBlgMpA<3lY z^H$$?IDSpXt!|zPMZI*x4!Ysp}-48X|DmDhJlWzX0h*I@ad3gDhQOQ;&Be;=1U>Q#W3HN{qVsv4t znX|8{&nDG&* z9!tB!*{ft+5O$FOi*>4;T$CrtA|wWzc43U+wyaODPaR_l)qx5^Qc5_fn#zKFm@WrQ zSZo+*BEPsJdOLX%(sSPNdFUN@tXJ0i`ztL(w#qXwCqyiNtnqa|ea8Ejp^<~m^9bIS z*e<#d2bd`@lY4aQy*Lg37Lom$j4aaHS#r zSnD%Ewds8$01$!zVk@GW-d5c@di(ft4JU+bqa3ZINAx0yOp|wT*h9Ins+src6hE;H z99g-l*q?0K_dUP4nG$!BfwPUz_ni0lxOe`mASOsCZ3}ATyBEy|O3>pk`}+@~b0tzJ znap;~%bYPw=+h+!QRLn)i8ohUvK9*zCX<#a%}{MWyPxjvZFEKH0Euz@eH~OKT<@r3 zm2!SXrMP|^|0C8u`ekytr`%^!fQa?XHYb{&;RUBtmK zdG6ystVa@>-MTdOT+J#S2}z+bktJ|6M5M(F^i`M86w)H{JoFWJPM)0J6w$krOh&ar zi5t24uZwz$k0Ye^&Grn3atc{si?V#j$5X@klcIV30>>I^dlnB_Gf$aR8MDol9yxBv zB8Fv_@PVq_Z(Y^g(oZF!=8)3o$Das6=TCg27QxN6T^^aBN&|K7UGChb7@hPK;+Px9k4TTTqD7H)U z9fli#_*xqQXP}Cx>-ybWfC?pD5HVRMSNC|Wjj+nBvQksIJYtt33Ua&)yCz01k-OK8 z8h+*TUmkz3%tFIKEE<0<*o4mm^crQJuMgf)*VtY2!c&Uv(_5R!T)kci zBw16l_q+>T9G%XLDHu(5-{i88RQ)zv|HOR2Qg4zmlcpfTSt`w5m=R2(%8FBxjtYG6 zg?KeTnnG0L1ug#L-Y%c1O@EUl7wJ-K+auk9(%bE;eg$i`i@y5_o2yTz8Z0Cpu zdXCg}HtMvqn{LZ695+-vTFL4d4U65>G{B+liFI5P9|#3ow6H>U;eRSgTpr7uv_6~U z$*Um4e8%00afEJAUdz74B$ja$GBxM&zFDM_RHj`tqA7@cV9?3zlsMn4iA%4cdh7N< zLjoD*Ql@Gfb1<=|33}&9!j^o2bYFckIn8Zrl0N2w`dN-Ki1&DrjE3GjsQ*~}DS~U_ zOZDLF4=T!xxM7-`md$;yuSJWi9X#FNs2Xe6@)mymx=Td`M)1%>trrL*UrWR=bLfAU zAf>3xtccH3VEtEgX;MW~!1?GA8xOU&DsvnkKbidBU(9UWXx@)>7g`;WQr?PxLg?c7 z;x_C;M13_``uDf~@Kc#tIw%7jY`WGe%rwO+u4&*OG&qW)i`Zzg6S%YR1jx6 zJS?{+giye%#M)WMvoc>PiaHPfw7=UI*)-WEf!+FnS;$(TuVb9hTEK-PI{vc~%9sna z=8t_4u60}4!bp+u&3w#}jiXgnSEXj<|LMWtL?z?DM`Ie(lY}>ET8B8Ai;iSQCIpIq zhSX*BA(#I>nR0D&#SuYYck}<(C-W8=c6fxR|He6<7B;KD<}oU$pt5cgpGahrd`$=< zCRyiw;V)6hM{Dkj2<-w`VNS{mHS!JV801JBV|7IRIYJR(`iVS)@VNrQuqKT-;#f+2 zUgN2c->STfh_pZ>e;)6?c^<~?LMuAoH1=Ke$i& zYn+_GsrNxEujG2e&vCzhXc%JK)YV^~UKk7ntfi4=ICwD*Q%Y65#;MG#q{$EZkBcjQ zd_J6sj=&XFqeTU(Eza_-NY#x^?ugtCH^ot5$~m4fUP_)}5gAWz#5Vfzq0Z341auul zz&^IpwixKSA!@%r>HN=DQ1m4JoxX0MiPQ1HYumVy46218s*lc>vsN1f@XiC zFJ!?a_9#862NIM1o_`mlcJ4tcCtk=~@%|0uoqq;RHx&>*T>eiFW|2*3d2TV{79 zD}||mnEv`@SONA$_yLG7zBU5#wKOE(G$qe#$`4WKp2{dpJ=`o77X4xV*DZ%M%NLU< z{@b;6+jfmBps+IgOFS9j8I`x{4imkI)Qb=QIRLWHL;SVJ$F|SXvY5mloFew5*FZus zt*du^lSb z(Ah}M)WnBhFA#Q6y>?}W3(t)AUHz!%U0NM$_{TIEB;dnc%S-~+^CQlZrkr{TKRKmzkA7;(-=>K;ps=Ql zNU@~Ng-|HJ?YG`C`TuU2J}R*KuVv+}#LhY>{m9gy5~HzJEY+b8Z!Srb_~`AJIgAY4 zKXTA>ATZ^%0L6RN+P~Q&@n>Ge1OSmP8nYEtkZDng`>yze^ib4M{%Q3vWQ{Bx z*${%Tf9Y9qy&TUW>ia5UgWsORA_*}QR=~-(Gs82rF)h-4$+Gk}@h^SeDk^Ba*^N}S zOX=s0Ogx(?zB2E=4CjsL9^i=@%?y88x>3XR?xbd{tq(zmo~Amd_Bj8XNrjk^zR2Z3 zh^1O1gd$tT91KR)k^lF3znqVj%)g_g<~aUG5_b0X1zU80ina005PI#;PaZ2pAB$jP zA8id7SoY)5^9}^_t!GsA$Nt*qGK_ifX4-fxxM&ExQXRJrW znoa_7JmuF~^hX;k)lr>fTj+8ZcQ(59n`ATst-Y9Hm0Ra@DCptS%Z z;fzybc-~VRT7O0(d~VG8%;y82MH(0TYZKRh(mrLv|8SK3%^wotJL=mP)X@P$*2}{g zICh^m&pR|TG_dkyvrAc@!!rJ6$3kBAyAVan3Iw4(L=ft#f&>H?v2N+gclw8m;2^;s zeT?F0VU_PMQxTvx|1VI3{2PQ?Gy=YzpupFK{v=4a#D5YIg4c24m+uu3SY}(K2vo!Y z|ILiw*PkzoL$ke%;^O%5`HcUID?-y@q-Nagud~B@tI-MAQn@F1YI7&lX8AAaYhNaY zn#Z0RATr~*fotZ6pK0ZX*At0|9;TI$YO{xth3&B1xYdBj8Tr9)tFgB#RMr0vUjc}} zc6Wy|MMCpJ?b{$<85x4#OSQ;Y3snY%AT~y;i>qiNe&y|&BLQe2Hj*^cLtz+HZs||# ztbpQsVD-M3wU8|HL&BrMY{dWW*8V|iJIB5M3sRT=8zFT+)a3p;r1{SmM7TLfps<=D zseulF@?HDUdf)`1!8Q07m*x2Z%=h*5v&;U{{t(AX7f+g8}dfR z65UYdZ~UTs*@6m`MiWv-BvqRT1P8OxmKQJbx3XDotvx2TgZ)O&L)WK_u4O6=nDF!d z>w&xN@@OW()c70}{z7xEW;<|=)cp^Az~s*Vw29hTU|$^sM}}bL zWtmax(jf3!8G+aQWbb7WUS!vk*^*Z?0r<;^)o7TJ@Q{HUca+u!1rF8 zWsFX6x>@{8I;^!X&8){Wo6NYsdj)y8CJUAiRK0Ng5?dgp5(NGN4v-SadisNW?l{Sh~;GXnAG~c++vo^}?Kuvm)%w9^B zjD3NiYU4Y)xVXIE<~~U}T=w#nOK#HILAF&* z%F-9|#=5b~5$zE1(|Elsxtqgi21QJ{q$1ESJOymLkMN*5w{l2>J;!`~Q(8#qMf@yc z?|MMVjiJuL+Mk4G2j2Io`Asc8GqZ4LD6i1+&6%7Z+3?ExVT!|^#@DfLd##2o8rACi zv@!HwGkI1Vknif9%<19=-uy&aXB#6P+xphK-OsF3$sb}ooIF=Ze}1c8@8iP6I#t*I zuiBj+%1__!Pmg&5X9)_2*G=-ppZ?bFl8-u@0{4_Bs_IU46`v7rmT+Oj<_`|01=-w@ zifhoR(X8pm6E&R1t#0wqcond%4co_ZC=!IPTE22Kp;A1Mw<? zqT;tWKh{ilaP?mO2$;BGU2fDc<&QebSVVhM$5|1d|3PT473nwkhRbg;{}H0OmD!;e zC0)D?ijte(?HIg^Ji>7sT_`*3GtJ!H9oF)-9$#kK^xoT;_q%m_NLMvZ_zg5EYGTilkQdh)_C0LyJ+UCx2 zO8&rLFdn>pz4DE%L2ByfF=(^Q4!zB#RJ4dRvKL->V0B@q$Eq)`7F<|di?YhrK9zuLt-_n7EFGHUZfPD8XPzTaIB7PUD5TR!Ld?pz& zYfY|va4>TNwF{dSb=~Bm7P`hLGYS)Ssk87Tx}a|Ujewh)W3AkQCfyx%xw9gJEv0&& zocl|r1(h@hl0(?4aCXvfDq&V5p%+@ddMVYJsgRl{hLW4TGG>D4%XM`~frPd2%LJ*g zl|iql?_WsmxS{P5zv(SAe?j@(&OA`diXi@-&uH6sNeJ(gDR&;-ClfYO2YG%{*WuZga#|0y2l1Fy=Bg!qbkleEkB0fvEOkBK zCpD`-a-?@&Bq{b)Z{3`c?F%_S?h{Sd?I8sQulbqDS0T9FTLiaToxPj2xu)(*Ri2~s zT-a@_@Ew+fTPWUQV`eK34;1{&ZE3Jt)#Lhk*@vAH;OKongLQv^aXdv=w=!*V)%qK~ zMRxD;MC(qsWt~4=q@XvhRJ%9@J(O6r`{!)sg{V#3*RNm6tgh<2Bl(-`lkB%X@ICsb zS^gzlX~}Lzh%V0;o-&6O3$?n%sc2s7x7ky_<7`%=ig{i|`8Cv*55m~=6pBU6HkbVy zDm*ssUh^A?YUyHDM$k6%bNQ(=2Ljp%l5Z3xA&RZ>d8Y~R%oBPRWE(qSHb35-)9>cD z*z9TtI4P*_1imht{YVlEs3N)BmS#Vb#T^Q6eexKt3g=;c<4g8Ri=s{5C7tgF?R>Mh z#Ij?K<`rKwzofW|1So)>r*Oi;xi(#UdC~=FoCDN-&*+%#w(vb_`Fcf~G@q*zI1X=aA8OKULz`LUS0#o({s`qtDY1Yd{VX%(-ar}(H6~O z^ci2vZO0CU%y@ED)M4{^0B&;l+Q|5zBetGCJ=*Uvp@G{5Mswwh*zCbtU#CWgp&q<} zFYK&h#-|$u=PcU!V*Q@CSKI9*x~e9~5cSAr+3E}8QFET|SGMYpyF zGBsM(AE=4B^1SCj`|(aW==pVJn6}3w8?wt21U2#?jcH&*DkN4i;iVWf5*c{hwr40< zNyyK+(fTP!cO9?Wv*Cfd zH>+AqTupZVX9Y?v=Pnaq-%IJA=ELW~%96@-v7JG$`~qQ7`>F5xh?aoxD)m^sjObKO zO!?%Be&fp=-1oh%71z1WbuPjlp7kkoZg=wu zNA&siUmiL{{*3^y8(_!d!DsJLaGo$r^oNATe)KuU9%LiO6g)3^r633r_GnilOrs`k80N~bi>IqXws&FOl)Di-&h`Ps#=%F2M`v54M;gbp&wRPy| zHZFgHRxPB(IP>(bUT3U_94D&PC(eZ#)3J-nRA0O{wVL3_9v)m0RH=ZQ1a8s$ktNYO zt&NlPa~OG{I<$NUPb6WDqY|f0pDRph^*&w`R=T@nvDGDIIW%Rh5NHJ!Sywz_Dh|TE z7F+B`Wq#~9oG0n4+&0mta>`cg>9AKkw$nD;n25YCX+A>Q>?1Bl(%XEjRJ@{O(voV3 zs-qhd58av@Y+|5o=Mp_Q7+^+MMpSPpn%2$7NlHVBf{VSFoKvoZH3xEs_G{(&8FJ%C zNsDW$fwFsIz+K2t<7n_qep*#JCw=uc%;pYV}ah(JfBx z8ujYe#iM}igq^GoM90CtO2{eNh2X`jbP4JdN`(aFQi}?oxm;kwJZtCt4;lC+&CflM z&p8rQ*}ZvD;Rf|=VaEFUQ7k1!=g)U%_&c6=CJ_?9S{~lg_2jb&HHd7D&+Uz9Fj1^qMiCyEl z69>9Kh?$Vp_Zh z;??1-tE@2j32jbbrG|3J2q#9RR^L-D-R9i8XQ)sIscR@5KS^}JT4P3uq}t?Llv^P1 z`E$zl^g2it6rv?t)Kr)`1R_GP&#Jd-<2{!t=D0@t@&p24r~TOpVn%lP^NwUe5i6(+ ziI-r==Z(eD3Su_NMv9U=DaVDB@x~M%5V+u&_*7uN?iJd~rCRA_zGI}1D@tkPza1~= z|8qRls$6dFE@Unj0D9xBV0s4FCSF0Kt#3!Z31l&SOsIvLd|%tj++F$`i;~Uip};vD z?68F>{$d3+~+H54zyO{KBzf zD>xkjq#E2NNhPCoX`lq+m_~t8Rx0|y*5oScO66Ur-9dNvJ^xE~RF_Q?8cp5$C6fNT zzx6DW4vqr(TgUX;$t1~pnuJ0Qa1fS%jH>dAbm0v=+qk zR~`G$B`QP>P2{eQP~zz{?Ogmn7ayQ8kvBtpb|Kt2x(%k^CShgt+m>Ebs!m#f7jCMq zaclu(t~aw~_cRbqd$#3ecVqk@$8)Y-%S&)mrhMGGHSY%3=^SEFq~5aG2m7MhoY=Cx zalK!VQ3Pso^qD$Sx!qy>E?u-43yWK6^KXPmCQ2yX1X|qremdNUv8A|Iz|)l_l(wXA zbB?U@u)ko!I$7L#bz4%%*()mDtXIzyqPE#pAd$q|Gik*|75-)W>7f`1u5mWBPW$Nh zYrGj}%?{cn{HGNhY`c?Di>>L@tMIdTDX~zKQ~nzkuO&0*Rg6t`n7pxRSGo4Fp$3M!52ep2nXQl6qDv7o{eHW{J9T= zjLwt`sPId!8yEgl@Y>d3b#VFIUthzDL5o-lF%r+0<(>>wt+3{Vmzjc@3%FnVhDWqB zW4HH>B=Dje5MQ3WQR)7@8928)P!e=bm*|NKmi|H*N;*W(U1g=*t(M7=Gf?PxFDKee z=pPNJx!o|^inCBX%ea~Zs3ZQP-!2u{-F+5vHS5s9b#52ml4MV)roKr54YSqHvN!>J z!mN@bZoIER)PLDwI{C<{*sS-a)#eu^C!3#sp-B6rhox3~ONUd<@@{qRODwGgacaJ0 z<&0?HnDV_IC4=T`ZTUuDo73PY(0(=cOnQV+ zYQH@L>=`#&f3)X;HG3aSaHVThzYlBNdZh-;)zXvMA;h z6!^iUP+)Q;P)3sgW%Rr2>y#sdP9fY}?ij?JY>ixsco4bBkEb~b)bE+6atqu?TKx2M zm3;44@dsKDfq}`01GV>KL>3U9o@jF#xB?$mc8TgtWjE=g)aQ>iT0atFaK92)iQy9U zt96qTCbx%|@#cSB~(uG`fVt3qM!IC}4z;RzH|nu?m)5BEk{EHq%@AGuYd_6%%i0)8;2C zxS)hM!n@r{ds=qE?H~~A>4zsric%`j<>pxC?K}9m>}Bt5mO|9IhqEL4(7A)C17kco zIJ<05YtO&SF-yU6u+n1E#P;x*1!Wg-j_>n3uXrLNmeIJBAJ z?$~?50!QADQ=hd3br`~5ZYFk*$)K+}JtgZ>cL|W%KAGbF@gXBgu2J|jlMREto=w#% z{RkaW`gWLz<9oFJ!TE6J0A6I{oHq(r0K227XTIGnC5a7&sOStoaLv000HzDlrBE0sYTGDI; z1U{haZn2idwGMrraw5ZW4qxH#Z~e%a>A3t6wXg{$J%G6%8uD7LLSSn#ydrU#S=^oZ zLjw;jadg}e%hnxv-(~zlzcvfNKYLNq`yAF?oo&Dw^=x}W{)4aA=P5LJoTUmO=RwCU zhE1VnBL=8+Od2`MwlXH2hom}W2KK8DeXsRDkDHdr?4yY@SP zr&{q#1uD3Q^1}vcHQX0n-JBEr9IO8k>$AT=faSTh`{ivLp_}J1R1sSbeV!Cc$14cS8<((tWnEK)cKfPqdq-UZghFMMxhDLYe!Xub)zq8&q zqN%^|AmA({=%ml4ZE4n-jW?v!HJpvk#Wiwv+i1{~IGx{I(DN=O+t~R?dqQ`Z=Ybeo zsM^z`HXle}PI@9PTlPHtuCr;bvjO^Yg*-!hu4X=%wi&sbm?J^Ez#-OGUoFAn@#e1_ z;kkqC`YQdlssv`X7y+#l&E`zsSe~?#bO8^uP*1wtsXqAh{gnNt&)Rj$xprcJ)E$R3 z%1lMJ39K~er<+QNlJp~AjD37dMkM8{^c}0W#Ha&=)E?N+9XXZLbp=ldm{Mzh<3Z9p znlctCa{|xD*Nf~9eTyQ_nmexPxExPpfklL~DIf4U-J5AHKr>C=ag7B!o>l*6B|TO( zt9Zbb=}7DKti<3NhtG-x zymP6cwuIMIF0e0ztXecEoLd2<#C=#&TRaAjnV7p~E6^Zr`^_Yyb!WNtz9(e;=?f^d zr^u%UvXL86-Vz4QRYV*{)14~PLT>v)*n&@KF z4qsh|xNTO`oa1PcsO~Sk1kE{$M$O$IWPBE~V+G4iZ>Jnl+U(N{1%X*qMS!2=RfPr- z*t-yU@A8K;KhSK9vYq;mXF(LEjx0dMXn30ZQ#+uOdc6&KGH1L>i^dJHq|Tq+q^w2* zO8c7*J?U+iUc_Q`#6=^tJWZl6KL(T9Pkl}_*!Wa}^{#7^;J}zHGHlAY@7Vq6?j5n^ zj5Zq8cQlCFDr=q~{JQi~$<%7xlsHG;;jZGLzFO9#M9$@gYWq^qfLZ+tTL**hj!yU= z;z^m7i&^AfK)A!YyM=G6wnFn?M1ri1yg@^naM!OG=R*eptBQ+(E|)fv&7DRC#El?u z@RQsCg$zqKN8gPDNBh5I^6L37_dUO2(bGxhqG`akXV(5N-N4+Rg>YoOI6`O>K)z(-Fv=$`_(L@__QP5d~!Uzh$ zrt2wsTD1poYLvEYy8JR7bqq<|PN%H2O(u-ojc*d9E=H{AbJbD7-Y&u{n^WPNW1N)Z z?w-hz6|1Q;xq!2g9wRRD94XFEV|j?>*5)uoP@$$s>Qp)iZcbQgAac;|n1+QF7~{}X z)EInH@4~=kVQlm_T_(at`jE<#KJzfCKwB6mt=>HJO9?;B33J;dd70HiQ;5WD(!s{u zrs|&(MU!1b@C+F4!V48BGYd*&wdZZMA6}w@Wq(2SiT{k%_<`O!b2v9Gibng<&kdOP z@TJ|E>+~lY`121S!METl##29fy+eW5-p5+%;i*;B-d8_A=X!I%;n9Q6&-uNCF)Xyw zWyZTct(sVCYn-hPVQ8r2t6LJ?Qx*q2DRad(H{8|tIPH!ow`xL_dc^4)8p37eWnzeD zF%;6?fC-gmcQI?GNY}p2lr=KT9JQ6!LV>A}T%+)v5BLVqIU?+kTwrBF(9 z=^%m0(|*Uh70B35Y;c>P_BdQhJ`^7>oRO^dRY|^74FA@M{(3>k9XZ7B>n-8uuZjVV zs>!8A^MoqjR%5?BVB)CdTd=2&-uxDx==oomebirb(Ra;y)WCxoi@jba=#Y9!0(J{N z%M12|R>w?HYO#8V1K+K|dr|pNx^XY$OgQeB-XuFnip$7BTBbo)hd2m+yC_`ZrDV`j zPy6`=a2Fq4TmMsO`hLxH`q#R%kP}Sr@JA5Mt=lu`=fED(PWTvujjn)zm=octFCe6LK+pyC7A%v!1GoU^pR1c2Z7>7RmUMkPv+}yMxOB_nBW8Yr3z!O zXVp!mXy?-OX%mH0LFy#&iaGI zY+8)%^4i6ecD5TS$j6XFL@*EIKU2_j?E)U+&?SA%r^!3d&?eV%>2c{G6C zm>8JJFiZMFgY0ODger}@n|M+kfa|E#zd7PULJdSPyydF3F<5;o2!cLa8?_&!0%c=b z`wrdddu#^fZy0JDtXRy$tZ{i*7H5dSPffyG{c&k6inN6sk$eO)z}8%S!rczwssk`l zM80@KKFf7x%MED|N}z&+U7;rKoB@ckmH}Lu@D~-KO zQIXTXSEB4WPq<8#;>i38SvkP)FjLd7;*_7UBy@?d>45WwrVlmwfCiH{N+0^>jHZ^W zgwnya#=_owbnAyr=1WOxW_mrfl@p8)kPWmx$w2AYmDf3ABiV;P+v6}57odT!y+M%K z>Pjo#2q*>KnCvGKY4xYjZfUM3F({WExDJTaBUtm0G++7$-a@jLS(VY zsustK>@)Rn7~2|u_g=7QR%c8Ty3L4ltlHj7tE_uHih!S}?a|7~`JQW^_desFoIYx* ztY7M4PalN|Lg_#rr~OM?Q*|;kWWob6=#XQJj1ih1ML!8Y`FLg_ItXVR>H&Xv62pX; z)8=EJ<7M&%B`EFQEPh&~k5Q%j>mrRe_;Yu4T`UtN86>CBWym+^ayK`|Q}=X+VsmJ?#M%i4Q?V|R{prxFboyuQCRgKL*deLz z6)Tdwc*MHpFjHAMS@AYb?j5eo-=vvb23JADKe}`m(z;e7NQVLtpJ^l-^G%ksDAs&mwF35NRF`2VSOE)8#qiFDy^}e0W<@Bes**r0{kD*ATuUycU2z1&{pr%@sR`J4j~VcN)P4m z*B3WF&IM??7vWr}a`wf3tBUbDefbhJ^rfJNy zc-4IKdcuMb1V<{k`y&3=M zJ}?d39haLu`K>L}703H#`7@S6>v_isoY#uMcHHyyDs*%Hp#$HV&2l)QCZ+QeS!Q!H zjlxq$7^xzaAOyl*vQ&QpC~_)w@0J#1F3eUGBMGDkdz&4YkGkqwF;49peNTkEEEB_) zip_*5TdE=gK1k^JSGU3=q09ECuZp*i*XRS@6L{Tf{uX=6s;NyfV!te|A!tt(`h62a zx<@;ci;6UXbkG-ne?h!0Y^56@A>L_M0*`V~8?!Xk*PAr8=K0c>EfBjDF4O;)c^HMF zIyIl*j4PC6p=w=Sw$}2T^1aM~sDjFH<%jiT8$MH8Y?y zn9>u`z7ODhvaj=U>-NyN+b@CvIk@Rs5wQWeY2E36FVam`5wOWrnXGJxj3e{iDPN627+>suE_K&QaasTo8Sh)0&T;(0qL+dQ*v{=}%QxLe@~h!)l>{q{qGFSfZIg%KJzsWj)`LSw~qfZpIutqwqb}m2qX_{J|KU=q>-~#9D zT%!^Hg&E(;N<;J;=)x$ay<}{RzOLUIBS|`^IqD8B^WFHd-R$uDTO!o180XC+{T{u{ECtSM3DmPc|Iq?y!cCQEQ2h}_{tR}plb{=PzSKzmCR37k zzKGF4T+8+3s_alPSIQ6sw_W@-u((RZh27#c5P0pv2MOp8BP>On9)XukskD_wfcm$^ z9Pq2TmS*tzDqBCMv|;6HOEw1H6oP(TAz=?ZvEx@j;C8ZTgvk0cMpp}h&WE2ILAy0x z$Yp)V-cgl@F84@BWGbIz=zNQ5KR|ppN`W?rf79S>hpX>MH+>;$rOZ4eL#3>8*M}i~ z$G)(mVS*j=%jaHWFZGZ7Eyp=8z&!;L{|5CjDTjZF`Kiv(4?bRGPeio`TfwlvD!h-a#|8 z<&H`Vy!T3p6_3{1+=$SvaEGrSGl@pH$$ZL)|0i*4y*?k(;RuvUb9(o*4=BTR|1*;_ z0?_9*EO9-*`7yXSS*p4Ja<`XQ{n2B98SX+GQ^wP)Js)$RAM|H&>x@{Vjk^Tr8O+0X z$cbs(M2P644+MNI>mK4n%ckChcYb?F0omq30KJE+Xc@=z3%8FkLy15fk#dBu$1=H= z&tC4`7A;Sw#%R9m4O9;(k6nPete;`K!%Udc;tTkyn5Y)H|CUgc3=%qK`tg!9= z$qr;l9f}!E|Mj9#L}BhoS;Z~qAwtY$IRd*z8BNc8-KL zi)-4_tlQU_qrl5Na3CDxAULmI z9XR>%u){EHD|i>)c)y88sjy}zV%duGm0Nx8<+~h$hxpLrFSvq=Tb)MliAv&E1=U2~eT$+2w25m2)B3v90YE1yYVKq%=Y!WioemiZtsi z;#8LR4gN-;y~}Mo4E9-+nx%|w%q}&UBkUtVLS|JdTk)#Jmj3Xv974@Zr)lgG)YXtl z5}`cA)xPFhY`#RwwD<9(4Pxtq>bNP@mon^&pR(lKjj`3-0pUJn3iT%`)pr<94J4^$ zrXH~UAMzXGR<`8%Z#SIF0ua7*>Hz^VzSdJ_81MUw14@5q@HWwTNxwWd)j)+`6)k5p z0#(GVxoH+O&U_oiT)CKFO}J0}ffA%vf7xwsyt{eXTSK0&q0Fr=Nhcl9~G=k|7+B>)lfc_4?n)? zlR)gq-vaOJSreTb8+FUM69?e=_;I}u9lSdl&}Tq@eb}Ux=3@r*t&&%`X)13n-VS5z zzY319AxVD}IK-as8^=7;+@hN*?L4je^;7tHo&=FU2tG9;uu}(6dp4GCDZA*RcEtUi zrtpMnd{d{O%ZSGq8s1qI=A1BEmYSQl)Mv=C9g{h!zcbxKJr84z&9fg_P1%4EFjeWh zA9c-9CE-3%qfYPei6l~>CbNy2nU+&WQjB^MvYhVLQ;7=5G!V0s)}fFB)|v4NC_mvQx&{pIB0`?Ob?_ozL zEp&!KPX*Gu%dg8<759XDhUhv0>>`qT;%c@WXe8h;^(Qy!6(b{mjvnRo$Y{h!=|cA= zH6z#FX>NRTIN?=cG!$^ze2YEfnGp{w)n~cbJrQMTde_1J^&<`0z8avH!$OPl2sT~O zPFI{kI;Yy&xk`2w73}@^F=wW8Ui)yRwibwK_k5juQk0#^|JGH!y6A_ZJ)+8L)=yJ| z%Sl7BJ1k;Y6kjT)!+8TCOwJnf?cU17X8vCoAe*4b>~h|PX?cj{=WPv>@cpk5*nB!a{$z-u%I zC(~`O%9d02*gCJtZcF;{G3@>@dmgVpvmT33JVZr&a#GOK`)aj(`BF0mVbHMOt}Q)? zD4yxiEMvRn-Qx2aCG@*SkEArxK>>F~YfgHdp2_>d^u}MP@a?~?j3|J<*i)S?Sfw+h zDwlhp=B%taGnO`$J4?t~><6u;&$Lni4WEvmRE9{b#>dkwjNWjs1!2JEdc-mc| z%>9Jw?Yohc&n)uFZt?=iTf*Kh4)lI?+8gSf7zz8fgOjrMGTv(bBU&<8zK>{bE&q0d z%*m|_jL4VaWI3!(^CiQYINt4cu|ij8n%2geNAZuh#Agv!)oq70r!+^!ETK>i(Em`>I< zG(Ufi)Mat-^&z3x#PN9bfg9b;{u*tBG(#w<-MrV!HK)L7eSyMN@M+zJ;x~k+EkwE*UOA3!IVof_?E%OFjiWVty!0W{_D<<45+ngP0@< zlQ_`ZuT*au*Ipm|xU>6uj2EaQXr!<0rhPGToc0`w4ov@!hdv5SuUqhf$YMamf5)Ir zD%9`%z%cszh#(x5cb8bGW>WSwsPMJXPOFci7wnSYkq<&pxpIlqwfb(}Oh+iOW&aX3Q zj=8&!)>vH=*a#L=T7)>(;yXTkS%h#!+S(89L3e*N_*&G_V8aD>P2Z~3=%~&n-k5r&XjsW@2dd>sNt0Dst~Ng->lQ9tg#fmbL%|&ppABb z6WLVmEos|ibYc*npM0DyY!{6TOVwo02+b0sHTkIG-UDW0m@z~NfT-HSmCB-jlO;7F*(mH5Y3&nKPK%8Lxsv=8`a%>0uR9+9EygMFK69}kyU+L; z>Rf_T)`pEbx{$~BrtvTRc7%e%l(pdfxVO1#MuzABs~|9WwTNeyIg`uO@q^_IlF$_| zfi7nDEg7oN%GR?CQE+gjb^!g~dZ~0NaJQtL_$$s{3?dsfflPowaO>}>-?#dR7hzm zhhm>JD|z)K1#3B8MB8|(_Ds|&L~`c&^kqY7cp>hys3?WZ;Zk$oFYd=!E}=r3szNhM zs?(Yqsya2c3Y+0s1x)=+pg^Aw)#1yy4&cSh5xG3B-hTD}9vbJV0cTU76yXP+$5z=_{g$SoV=#vuBVGV;gFhBK+~B7Zsk#d&0ziFNra zmQkcHO@uj;Ts<~|$01ThLJa@hk?;-bSRH@3^@&b<7e0%!`8}c-{WotaK z!gHpzA;CgLyALr^vse{YV|Zkj>`}A3$Q_j|?XqkZ>U?q_zit53SD%&?bO^z)Cq$XY z15)ozFmME7vb8_l=8g8M7|cE-Jq4hTa?K*8U0+pB?`??J9D#USBZ&otC|J;5Lllgx zk#$A-jy1fPiS}FE!Kd6ubjJnKrf8R8nJ)a7s@n@fVG)2<#TbLouPa>kBW&>$3nw4j zX=lfaNM?1%?|WH=H`@4@LH;Y3Fl!5`7r~w3Ew?zC^l~RMm`p?nqjAJP1LY!$Ry_y= z|McWX$i8o_hrZh-@^TWQ8uvf`(K5Kco)bkI)Hc`N@eCu-AUWKVTSkB$}%Tw@p$bXoOF zjzVQ)INNP+MUZT(M2-%J2%Cb_FxHE9X>a6ct?jZLSw?tT9MBI8;@u~~ha^>?Cd#Q} z)rM*LZhpvlEgfE?I?kk`BN|9iF=)FmRwh(xevnpuQe#CW69BMF{viR@?)sq%sO(-n z^g;t}B1q#dh^^>PV@IX@58H_3<&Ei{mr9?gE|Xn0;`{M^QOu0Bd0`%{zt}k`^Y018;m;aX%E1P;Cnoty!PMH_LL*+G)$9gFmxm-CZyZvfa~^+D|ko z7A}z`m1BYns`~X>B!BknVz-KfO|_30Em{x*bcWX#Gh>eCv^V-XXr=yuYzRCaH*EVY z_qQadN&og#*ksxbD2>jSy*uuiJ)9!a+??r~*f5p?4q#{u+TdeN_otmV}agbOc_*w^dkLRjyWa;nbtpYA>@ z?#n1aG=J4EF;jm&>`ZFU6Tdx9dk~LdG4j(Y#us~ev8NAHtd(1)^o>E7p<^(|)s8aK z{#A8tbht;mIISE5s2}OOk?%XBnb|x{U&%HH0E)t6d5YcZ91dZv-Qv?Nc>p^w-mTwk z)UE&JCyuT$ANOz+H= z4gUA!xFz{z9>{H?&D&6mYr4zjiweb~cg#8ykMM|It`+gJ-4o4P*{4m73!FOA3f!=< ze&Z_rNa5vzOqn~3XFbhdphOH^U({Xd@)wf8H!?&PR*nf)FVrPro5&97b@;!rkqE)ytxtS73#T$p+EZUfBt;iVy&m^bKmYc{i_E9vTYl6 zz>cI_lFN8hDJP0PXpncp|Ljk*nUA0k<~aF zWrJn1?69XZEi;(yi%nTY))yc@$V-DWt;bjP449-r=r9cL2OyL-Rgt<=5}I#s{es;B zq^d#EFLsw*b(-@@_2me89>{>VWp;pv3Zl0oX-ZiSQ!>P=Q}F49oS7}}X4&L((E6gX z8$!H`Z@F9IRuCV}AiGImn_HrT`x#i*+P>ez9jQ}dz+K(i zto1zqp3wsXGkOL^#|vZCv|IXvW8B#O40&&oQJ%cu;#}}5+)yN!3Am`&WI8hg*f*ob z5Z7ORk?;Ofx}QH`QcC6FP4Kpfnw`e=VVo1z#~pc_`S($`hHM3=W_N5|MFjL0UH3#3 zLdqA2h2t7E6b5wet9RB#au#@@B60$}vjnhw0psrBg|M)^Q)iA{CL}OQ-mZCZ{u)5_ z^J0Rb%Nl5~>9<%ALM) zgVg6A@Nu`7ndND?OgZARG2`Oz^n!4es}5gT#e$f8q_H3bf++Cfpbm-Im(DqBl>$?`P7p(Q?QOjZLd&Z?969z0VlBEfj14tDT@n zAH~fm_J>00UU`1E=t#=g2A$ zCeX*o1ekaEXy7Ja0&?$zu%S}f3%u0=s|a7wougj>AgSyQkfN4PR8FMe$Kj@rKz`IB zwC|mhcSo@y_KqO9m)^-VGfC<1*g4ZKgGdForM|rf72W^n$z5{wT!I>K1pcNAKHF zG>sv8(Vb6Ubz=@2k6Di{CWQd?13Tu)wwMfIe#C}AHe=RG8v}%1GE0<_pAv0rc=h#x zjQj#zu#`GrqHhr~TtFH*q2%%w??|U4cV#4p@Pk4S^#_SIm(p8w|1^Ev{kqe9EO43r zEDr8QmC4?d!?Bt^9(CH(qqQF2U(P$|^N5c9J+l48#;0k@5Ab{^;L9d40N9ezSCpoa zKTpe|MH}hN2bz~7oJx*2((3C*W%_L~aMk`){fin)2G5$N%gr$A^slRDfd`+u;ck<^ zkbIi&kBYzae~Trne{P^vnn#%(wcdTrvuY$%Nu$NFIe7f($@4G{v~%vK83B7Ut1Lx( zn}LX1GBuB>^@F!*YSW1Ju3f) z#kc8FcXv;sfnH#Dh!B?1Rt4r~x>m`doY-n3#F201+qW~@2hbyyTMz!2F09R_CKm;< zc)S5%zwUWHZIM3o06CzTAaHr%@m%bW*RZ(!R~=9*fh`%RN{;TwE}2%Xbp$t?|JHAo z>2+&X98b!#De;sUp)%fi(UzzlO$RaJpp(h>o~tdSoavG}n=-%LPlWVEs%Zvkb@OMR z_8fC3KSUV88V9xw6)!-OY%6+bu9_w3K@!fbi7z@|`&kEa>n)8Uz;_8n;AbtdKAT{% z(83S15!v{)=>ed81RHLWSPQljKe8#7}`I`Kh|>b;0IV@Ha=( zDIPqzm(lV{^&{MwO3TOh9fq`M4_(Fgn-wL{EIDS3=L(p_68DrV&#~Xxh2l*}sqO?K z6nD5zw+fGn3E*NA!T)?}Q`{Ce%>4`r6w*nintayiOEwYzBykM`GAk-fL&j>I0kXfb zZizi&z-|B+VBGgbCYN_~X~iUOuR`ByCqz{&nd!YABLLg$elxyV5yee+5PhnWYv|h{ zmTh^o(d6zdz4duTj=n0^d)tL9^5&=!oUel%@GQ~8Xx}OA&^~7JDaj^LyRleri%a-) z)_Erkl?Gtn`d-wjSSM zJU>;@8S*5$n8NeLo&f|~r?VKx-Oz$&tK0{dqc9OVd2}4QUzqOh?ECv_;Yp}=S+}~y zvQ`ld(jVNzmP*^6%R9PX-Z`ADpSc}y)ICeG3840yk8Vs(^A&NhIKDesa3t>=n{gi6 z6x30h2iUwky)SD@Lq%s+!f!>T0Rj4TX+;FZ!SVoWNBE1!#;Ij0RQSf-#~mB-Q8exo zFQyqcvh~YZYOAa_EQDOI3S!@+CsE-@5GZlBdgq#D9)@K=SWUj1dsaH(C^9Zsjy57c zI6JS(TJWO5Pu3T6ws;*r@+f-p5$V19m8O_v^e8x_a-GSQEj-(H{B7Mb)`yM8lY){d z1;}}hpV9TVu67*|WP!v=ZiCL*Og+bLM?)j;OOm`8M(jdnMg7_6m~QTUT71NluL9Lv zuwTZi`Ai%Hr1iJgxkN{q285P}hr{Ue%zU~EHR7jl5@Qz7o_dDx&g_R2#uxwjmK9)N^+T%ZEBERj8gWU!+zkdes%Pwfa%O2KVBrp7*as$J*GD&usPUiYW7DwW^ry zGSb+`#&*U=WKI-Hna<9z&1&Wn`L;Db6QX{3N=twr}b@XPh7_$nN8+j=GFqQFt#ukc|dbB>9!fTTL!eAjs?+JePOh56%s z-ACsR%Yf{yX$Yg`~+WR{eAbC&8rKEz#AM6oq>(BL54UzIU4d+p3(XU zRQ6JhjM3S#@CHcrC~lPP-=JNotBVRF_SS?lxXg<;O;91lIlbxZbRAKYX*3dkHd-jc zqs@}56a+r@;fzy`1Fj`G3glsAA?EH`kMY@5-c~aFj$jZPTW8iiJ6w zj>MDLCU3IK#~T5aKUbCOxC0O$TZ~3f8-5mQp1*WU{928|VJ&=|!d<}3Cpf%rMVv$- zWgw+DRP#uk6nLpWE$!7^H4>p>G~%QuT{PzQd= z)g=LF%UB(c0)HQ3b7BAK2^16A7IGDFXH9n^{dzZ2PvaV1fq5j?1-z$ty|%fF5ZJL5 zh(H_-&I{a=Hmb(4WCrCu|MgWdVV2HhubPxte-PE@4^-mQPkTMF6Y~XB)8Mj-1#f0b zEq455)19ff0;D!B{xVeq$H43V)iH2Df$L({iI}0l37l`#F~I5+ByfTlQ1GxX)ih;C zAOZ?}?L}j*{WS;{-pq$^1I&sxP#ehNZzyXW(V=nXuud6yFh7e^>)V+RdGlPb&23}~ z2qN2|YMHH~rNB6Bd14!kEs!!gF;@GaR5iIMIhRtSp=X{Wp89agmm6`5a+{8*%<fnz0^akdWhlF_ z24HiYcpp{ggs%cdZwk2W@QZxVn8ta!|1bl;{JNS!58GshsIcSpF@?zmN^Wux?9Qo9 z73kIJ9VHaC@=4pLdP!qeGzb}YM>h!B&2Ol$1XMb;5A6?ncIlM)DrE1Cd6E2=0}DKU zT%-|T!>f{i*--RM z^Ee)4(5#b#@%&{PAcl$TCr|?4XoSq;Y=wHF&^ztj??)+Uq}3F413JuUjv{vHc8}V$ z%Bqm3fW{<*g8hepSwnisHM!^DhgKAD+GbN4$$3KXNxPvfXeUU--Pu%fw9~8lZQ0!Ez*be*B$E+6b{!+ImV{$=y z4U{w8$YYi!j^f--J_H_HvGkhsW5r#%W==oJ6hQC7X)>&h*GLSgPo#8PkUi*;Y*c$hO_M~PH-lZh%p!@a-G zdXr|>(G<8lrO`=Sb7OgRf|H(;zAn+SKeSA(GwlBV=A8dC*r0>s$-)`K7F#4Y4GE|s zSD+?tz!^LU;M!m3dI&aOH8Hc=K)eseE8SFXZPzJFHcEW_=^d4$mfJkDAReUNs|iSa zs;~g!myX_PUAbo%0^2t_A?!(ZwlOfLzs{tV|mE`;P_V*=2SM9aJ*b7j!n> zo{tDqBDvnPieVJh8(Mn7%FZgB%f%HRd(GSx~+z zpAh_?5KteIV$)3u~g&Y6RYs}|{KsD+#^;Hr39sxeQ{{#AK zAJ)17f_Be>H~=#}GGaIA6uuUK>Ne@(2R)YfRdK{XG}7nhgxvqh17Lv8=bjT_G>CVwDRLI- zZuDppgw~2JsVuP*FU^}ar);ELy|-SU8g_~Sr*KF3-S|Zdv3eR)x_l{GDW#m2(oLAP z0aQHb6xzBCZhaWl{R<^>_OA?fFhHfK$41N>>nd*X4J5(>4Fg zTvM$n4b^e&pzWo$}2Os?RvHwpB%T)(9 zy{^TGlMAiGbaZSju1|iCb2u%JFPK_n2@dYk_JygqO-g^bF==la1wRf)@%`rXg8gzn zvS(a2UPAk;H}> zd<}ocB1z7lO2WmvbR8@f16~yh#V6f%pBBVqRUAv!YIZ1_5d9nS`ZuytHeM;RoV`tEY$4Z+EM;3SU!U;+%WQJnEo6Yh4=^=}c zCu_N*Pbk?t5~8Q7d=k|=ugS;@%s_NXaFzCk#A*{#k(b+)e4D?ca@jb*M@e3_vm|M( zJD-)H* zCvz<&h0034^QCKz6omPh@74RA#U!|1Ep`efH(4QZ20h^3fwJ8jxGL2Y;xRSMKT-|v z_O6j{cULUOw7(3HfVZ<5UQjBWqu!v`VFX=l@QAIdJ>(6s8HWj0eVxG3>Kqs|TbK+r9RclrNA)FA2_^|#i0OAgQ3G-^Ufr6qc($pHXPCCB5 zvrvNyAuRsj4?er?bX0o^fV^QT5-x|EE;70`QDb$adNuY@alCsz5R?Aw)B1*>en^dV zwm;@-ljL_HkXNGj4FUL$Jn%RwZKuau0Ego?UAoUpHugv5W+HwJo{^C0?-Mf7wz;#Z zgqx@5V`i&t=nd2evynywEh~Kt2<T5^<5YX{ zy`sYN&dA6RHOhL&ef)ypHHXnQE3?;JVU!f_N>RZ$1pFU&#IC1AUm~}Fs<19hmH|Xh z#UXNEQ%_u6_E&`SB`Z7*>P&X{bG|2mcwgs5Z%&N45bCLkh~iSez5F|iU8O7(xZ{WQ zSS4&Z5ra$XKpu`BNgLIo0 zh*c&HN2t7cZ6WGZ^Gf---V~m<&lh57elfhTW@h%og4|bc28_R#_ytT_biii z^8g2{~ z>s7B<^6@Uqq$%7tp9A}k8)k?1CEvUE%fEaCf2+=9`o;BfvGDACtYb-E{zZ!-Ih)R8 z3NOQx6)IX7eQ!R$kK_kJ-yi%@99H*y=g}VI+AS~Sv>JGl*@U&f^-=(%Nvw9EK-|r6Yy}l_4i)XQ?oRU(;4;0VyIUJ+;H^wp^y-pEt zgFMX&T~;rqXaq{Bc$U6GdFOXVZJ{*NiJGKqwu4VGOw7a z`7;(ta9CoqYyZU)4?BIF5Xp#App<;p z2yhObo_APiU%`dmW26;s_)-gqPbuQgqcERrC{wOFu}h>C_i6Jw#SGEq|M7u4s`M7T z(O@Wu*XC?c@SA+dMWC1pygOR`m)rghn@N<<{)WO7T3I-TV2lgEzO1nv*9u@~9t;bumH<|wVQ zP4`Z#lUkLJB^8{9m+thK(H5&s3w(hmIYR$p)^CYw3}s zskssz@FeP)OQvl;$Sc_ur|u|?i5+IoR)nHCHWw#Wcp|ImEG$Y(FA3kLtM&7`Q@L}~ zY3aVCsE=k-`PAXvArj``z}v6xcP`Jz1G4o%6Z3q`G@wE{r1R?^Ca%sKs}Z*KX0>g@ z?BqxwL{|oW%!IW_Y!wmqb(Bh2yjsl4-PwYLr}z6OvI+T6L$bSkrCaWq_uExqR|)^V zbv@w8kfzPcl64^BP*8#?F`r^Fc5X&O1{#>HayHh3NvRvSRm%Ri?FRPpuY%0ACmJU9ATVRJMM!AC%!tdZagm_aZOZ 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

Sgm)cdvvn>ta#93*$n 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 literal 0 HcmV?d00001 diff --git a/pictures/raspilogo_tile.png b/pictures/raspilogo_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..57d25beb6a31d9d04db27df5dcfcde68d419e638 GIT binary patch literal 60977 zcmd42cRZZi_BgCWi5d~TM}%mj_b!Ouhe7mFqBDB$(G!doU63Hb5WO>c7d<*LM2}v7 zT=*^Zz^Zd1m(Pz1H4)m0ebuC=E3Qd>l#~6ciME#aA!2P*Bh>k>xRLOys8@ zxUUZd1y#&eR#rn%R+e7F)yc}%9*ly*^4`MK^zkcpmR>V6Q`6odwih_Ao?36;#%h@c z_P2G=qjkySO-1#=G2&5CC8U_}xF|{d8oS%D^8vp?1{*#fTPXBJ+A3?6cqvQRFHVJh zrp0hB{7A}-z9lJ@nP#M+)6v$JhGNNjB-Tbp<77fl{s>GCve~>2>CYcL zj(v=wV2WMH>h+W9*A@#o1vv!|S5OC4{-qQGS9fheg_=Joq`E=x>{ijd# z%UtyTlu^czZ79;(vWkkxZ*2=#Fxb(}#tGup@=+IA@zD7d$PEPrm-zlcMajq{M?rZo zWUHeO(N|Rwv2b$WG_!Ov2XlHkIN$e!BIYH6EINQ8X7pYT_Kt2MUgA&xfDl2J@2de% z>Hh$M*oi;YSJj}Gb#evM3vhCAay^y6p{J)8bG5V*(RwNWZ*=4@@uxNrh_eU);OXhf z>B-CKocQb@HEnUV_~$Ty32pwoZ=p_x+lg zJGn!|pFX`G=+D=`<_Y$){qIPQZvQ3=Ng&|91;EY81^8cRNMiq--~Yk#GIRb%B#5om zKa6$X@{eei7Jm-q?Cxs+2O}&k0APEt1K1JbhQ#9r{7FBOJhA(ki^w|JJGp8*n^}M* zxW)b;=C4)%<;1_B|4=Obm$t|r-H=?9;O62M`Zw0!oBk&%=)b5uT*80F{7cKc$9}0>TisDOY9WT_K ztcS}*+Ou~f?0DVJ^0j=HHuYu``9V+RSy=Cmv=HB(8P3jyu`4dJ1EBsfk6_6xAQ{{! z7{3x|p3I5KoGWcNP-0VX$$D7qH~X3E!pNzp_0QXdGyiP2uWqlGeu-SUil!RL&@;Sy z^a}gggU4tOgTti$fBqAbB-kY`cFE`0mz=X{&A8hw@qeEE9z(@e(FfYy@{vtd7jug+ z+leBYlTFFHS&r80qd3XJvwxiTf-ONC>h{4!F`k z3CZN?JCRHO&naCx|1?fC0}=x6tX%m|LLN=U{um!%Qo_Uy{Zkn#qol?r!h4<@C~p7B zDLw^y_u~(1iGF{f9)XIs)*a{Ow=G!zC)~3K@aaJi2BXx%^=@4IALRy09`Yj1S<|Ni_Kj zflx*%g>1Fk^TV};33bWcc(J2bp2uSfjbz4N3?H*ZE}^CLO#jhr^!PSnb+LB(HW|lN z8Hql||D!Z;?9nLebcyNLo(mglVuvr!mO}{}3R8{en)lqxaXi~ydh);CJpKJ|7ij$e@FDovW z4cmq^r|>dC?C9-P2U*KdOC;YuzWlcYO|gky z(cCcTym|cMPhxH&+ID8EXn0Qn&Buw2+a;wxK-O6s*?vcT6_S#RF?V!#hjfl(a%8)L zr^J$f(nQYkKuaMo_d7IA75kVrxK4U8_5&aKG#+$4^$~d^_NT$zq`Mx;+cEzwWfND) z>lMOZRp)pp%lgCWGbBL$yxZZyz<*#+1SKkeKh-{8-By?NR&Qzh*NV8aJWQ^KsYqUY zCmJ>O6LYLv!SozgWUg<$yV*a1z0C6K$L^=z`)0t=rB_d6Jf8Cxg>q%!`YCeBCvrK- zFYtzP=?c2WN}?PhRU`$cV&MneQQ-3|+JfE=^o}z8cdACpBcJ{s`}zr7nR7%xC1}t@(d0Ou-3# z$WU=N(HnDpwUXT*y=TKv)4KODP3toyYCq8tVMFuDlwqgV&C<=D=L(Ia$iBsb+hDOPkgFlP-i=-2Z zA8Q~ipVm@h>K3vYwO>q@2e{uf4(k@`@xMM;jdqAoyF%`+w9XiYYVEhXPJzE}4-*2v z&ps3yO~{%4xfj;x92(T&YMrvD>g1DTX!qq?2mC7eh4%Jo>9Dl;3ay0L??K+Z${yNZ zjW9Io`ZkB7^*&SvOrX#gKaGLtdkt-0e22>X;UR$O)^szO0zzpQko%&3k3QE=%%U65 zb0wUt0l9|@BBa4J$Mas(`=wbabB1i*aer z3#Pv|zk5`#etZ2p=MIwmx_ZJHwh7yL2xt+JHb&@O{O(m04XqIbqaW#;V{r5nROAy3 zuIZea#vBMd8D9H^%E=TB>AE>75A;WTsD9eJJ#2Ebt+!$gwd2^d^ca1$)Z`^s?O!f-rl!{)>-a9L>CX^o%KT1udV2vXkXgiEn`Vy=iKn9x4otJ&N)K!12IW6 zbxN(U86QR;+#F^A*goZgG%K%<2BxVBo+ZR~mHwJ~Tm00rBCgzTgUxJ8kEZ!4Bm*uj zVY%Qw{d%ET;^ecHbYczz8mr(aV)OHK5st5Gb8w1* z)`y-1f?}75f-6#-BSsolh*G+oLJChzuu%UC%zzhF`lvsE0* zZ!b0@UHM{OTW`>0=GG!|@xLF^k+2ru=v9OmLI9 zm3WmY{pNlnCxTl8{@lrKODIE*xq8lnlf)ZWx1EKWDSr0DEpG`+S^}3AYBFu;)LbDx z6jH<=$2~b_y+zL}_6Efju$Hf=MkYyC_|VCfJtrlJ;e90nkE8a7>xzy!&r*t^SE`aGPjbDoI84 zR%^uM2=Jk1hphRJGjhGmCUwJse67a=vQ?NG(Y{H6i$9?R11xZC!7jv>66N?m05k|dY;c|zjFowVnooW z$+1_|>M@1_5`_U%y}@{Xw&)AWBS8Hq0yeoL$Fn?q8DP%f$0#kltq60wIGj z)b%?47PLBa%Ki0Md8@=sht&s%p8`vMZnc-&rI944UC@OnHNpKEChPCc9{9tLoopDW z)Gp|o@DOxcsZhV=Zc(3Z9I{H+GpjZ0bKsI^&T$89mJ8T?DpLTTrP-C2Va|ZR;^GesH3< zl;^|Vb-;-DSy&9Xk;<_yZyvebEj0Z4O4WPdTO6Xkb+Y#Q+AVh?NnL^hCz-q;V7)$7 z>>*$$l;9SF%xL-kqBXjOF32iRy;5iSVWCUM)Pmwx)Xw{ zSHnFj93gm)rhNE=gBJF2B9<9a0z;(~`<1m6a2R6}7QTdW&}!{I zo=R}=%y?W6cx*(@4t`p&^xDWO&&2*^!zQiCwfu+O{1{Fg^tLk7AC8T?9sM7L)C9r6 zdbyi}@7n4Zx4OjwYn|5UfC&WP(5byj(v4nk*sUal|Rmy1o% z8sH|oG^V%G5z7U|9A=fBU`kb5+kE%7J;%zgU)>Y@D$!#9@YsZQsZ{Tlk#&iN!gL9 zqNKG6#ORh!UOZ)cQGb(M8hULUtZC0`%NL^<6d3kKnL2nl|?RB6`q<-nn9zSZnA_ zWvm!;8O)PxeYk`td*`+QA8{Xvz(TmVM4)c+ta#B`D){%;fSlh%>S|KFaGKJ$hT+D;lFT4a6pi5U!o$ zD|eaD#|1B60K--7M-F)(m2lbm)kJvmg%0JU%So`xor>=xwKq@e2_ewca9}h#`&`a* zqDU1t+=ca>VIKb*H@>jb84JQQ*s1UOd>{MShnqulZLNgWwyNWynb)?fZhjBV|=#f z#ZW}9{~fCl`6II!(qSd_jwn7Bfc*6>qKrWFDQzhKD!1K_%0~qDwt$c%Ae3(|*SR38 zYf3cW>@IY`e6us8VCS7~C^dVuT~`U6CCz1g3*OO6BppG-Jck_1>+zVJQY{f%XU%ts z()IdUZiu|dh>1@35+6aY%9Qs^2p!Vi-Q$sfP|cWv9pkqCajms}i+b)hbX1V}!CA?HKA{0HN+ubo1ZsgWN?%H%lhp z1Xn}svWE5ZBb$R>ggTmBj;D5%ZHE#{kRK@&h;P6#=8WFxKlcaAYIvu`w@_}*niHt8 z%%Z`LRJ`SUgP_m+9x6DXn`stW&PWn8o&4Zz_HLJbcV7RRI>3UdNJ4Jrg?;Ot+C0^Q z{#3yz@h!he_a@B~GoILX%AF|X>Pwmd$AjYQZWNrE)pauCd{0d0w0G_N5f8IvZxuW` zgTuen2pyw8uqfI*{;+gi6z?gBr-dn%f9RGKg+upF9fQr5w^2PZaP+heSI{cn*{A$b zLog%$b3_JcpIA*OujLI!tK*C}G^kyYj5l1*#Q&S)b&~feUkQ9b+?qAo4J(P#9)zBW*Mj{FtZqR7_vg z24ijzY=DK0m^q`P_U{n9Y_aOpD^tmH}<9kf&5 znYGIXdz9YP>iSbbyumWD-A!~T;54n zQ1ZYAj?SaV3FI7g)&N^VbRA1h^EmvKeV zMjmW&<<&8mL%X>q-b;KE9GxhZys`D%sqBeBH<@hLBgds4CB&lKxFM~Pn+sKvJ)byS z_g#JiAt(`(JD0cGdC&1IlG^o^|9~!$LDp)QR}~=L^TIv)!-nUiZ7(mLq5iwbVZL3b zW6LOL1v5VWPpiCguFTHP=x1ixa*`HIcxk4gcnwGO+9!dAcAA`DS zqHj63!dSGTB)?NzhjWKKdsyPizNf`+3v_Cn>?qljWIu>jWl!D+l(y>=1Y=C=v$2`u zy{GxGs!ZlL*WXa4k=_-AQ>_>?&_5;|PRlF4HQ{ri8TXqM{Y&F+jp2DBZgQLM<$!v< zH{OQD@#GuK&)$RUxM&a&{?0O2S9XTb!SxH@{pM+!!0SV3>cXJ879nVwh}By7d(21% zJ}imGb(zK_w4-lChO?gmQQ52(`jk~+ZcHzYl`z;L^_Kp+=qM{x)8)&tywGsT@*?XX zeJ>krv+(5WYojxJFO7gKF>hD#*8UdCkkjkQukMp>ng+b1UUeyW_3p7N=i!57g1JzN ziwJ>%1aSWP>~oZQ7Cgj`8rBOmPKWyQ1XiL!*M8yl2GL&_6>GVdt$y=?J_<4xhr-K87A%p zRNX8&1mQv(bQDG6fN10OvDA&hWP$FpPi$dwn861xj<+V*loO?i%%Ds}v*B}4&}!^A zt{H(;3D8VGrf`M6;eI!zd?J~Bg=EWKXlKji7{0rLNp7k1=QCi$d;$*ZKoX7-0+C)A z06D#yRFw3S$I33OH9l0nH0mhV^JDRs?^74q`gnQP;|o_WAI}nYD{5SgW>XPe)v*^! z2@2umec4>oXuP7_0OQ9Luiyt(cipZOF4I+n(+q8D_GuSiKIOvTIL0sHok$!3YmJ#L9nfP`S){`q zX`;B5erp8FDxN+@nVpE(ceYW^U!UfYDM}YrwUKVr8S3}oS4R6p2S5< zMUw4fdkU*JMkL)0LLr{Qji(ZfYLsHO72*GSaBjPqeZed`@TiYD5=ww@DO(9`nql8m z6+0f4wTcsl;v0-l>(}Ea-9QrMVA`Aq*D)s7PyHG*Heshl=Xe45O{v#MJOJ#|esm_89*|`epa|Bd9IT(n?KGiC-#8z6 zL#Zynj1&rDeM#`tEKu-k4kh;Z*u8nsllYPZAzPNHlK)v_B{qEDf8STy8liPL_|g&^ z?IG4q>col*ES+cdJ(m6pDFr$e4x5yf;twusB5~GzUz>WakiHNy=So&KmZWt2pzK2Y zPTu1pmGs91Yrmeyho+<)#}Wjbl$wMS+-?=;&{8^;HQ0PtPU%)R##;`KIsV>W39D>s z!ZY`haF9z6Pm;jWjE9MpQlp~xqqIDd?wp@X(T^Br=ilP{nE>Ny13-|+|A~~+h7+iv zIXXcs`S*AfRBV(;)xR+GOij%!E$XW|T%q_FYsGVe45+91T+prKeXvgli&|Ah==$bR z$=>Q_gY|I`e&Ss{(9q%AfwJTp*D;O1f5*eMAj>qtYMte;`Pe;b}B*{2+ExP*-E>mjd40LWSTr{{!mW-~cE&8|VtgM}3 z&F5!jBhdr)LH2rQWqfntj84wquJ|+>&n-3tDOr|ZQurd>5Dm>|i}Uxcq>~84Dz#Wb z<3AL*E%X?EdyRDH)S!e{QpjDrg>plT+B5?!h=?o`<^@!q{6HFysL@t6nPiM+1KuRd zG{w+VVATPFP@zZBP=9@z{hI!K>=Y9~eGWpP8jP-l6jdY!oHs+Y$vNh0%RCJVg+JXQ z{nr(XD%KrwsDK~2^R|zk_TO^tL;eg-9Fp|tVw5{CZHiGoeBhmx#p`qIH{ zNp$TbO)paG4OiLc4ti;2`FFh39U;&0V(Y#(Y_rxP%}3!D(_jhRDOLbq=YT@#y@dl> zHG}E`A6E7l6jVO2WMHit;I$gW7O^jGgl*v|`I)ud+}kM|^~?b(d|I!t`wv2jj>9I4O|`M9o?O9k&qKJjxLLEew0)5vN|8W ztx$tU6p5R4JOS;YHRzk^H}Qrpc_Mw0!7RSaHIJ=EZziQJ9{{5(d+|Et(nHS9L9J(3 zH0*WcPz$S8I##mdutmp)ts)GrZ{H1Ro7)mH4@zJtng)ljJqB^GC^`9hL5_yuNi=So zPaVugvT#h1fgyac!3=)3*zFPvcE4ry5#0l9)x$0n+N|HTO&c7AiHU08&b0Om-^#zw zW6oaNWO=1dS8!`MQFt{&RpWeja~3&qG%(x*dlSNxHRXYpF#g(MQH9X9x4fACjLT(~ zc7vj-b*Hm+2R4Al$?9g7;M~OKH_4t9KR#YtQL5&qj~FOg>lV;ANCnJKnr z9rKR~?S$tK`FkZ@nxX++Y2GDVSsDyGFI7 z-@wB@KeDS>qJ3P&!C&suMhlAX$~Z7%xm&F zzwXNEaBpCX2b!?j}l9+E848A>xCJo2#xmCq_yR0TO(cC zx-36;!KU2QWS9E<@n&u7je|Z-U*k7| z`9h}?DjpqZLN5MuzdqCZa2EU8^kAiyMI8TB?*gWc{J=QjZRNwG&n@!iijv)-vwkh- zQW=%4U>{&L^28lU6cD+z#QUYf0oQ7C-pEs*=>~z|dTTvO?OzZq;vyB4>2@SFA8s>0 zsxhDyZ99AL-UxB*$dh2x=$m!FzD(#eluVL1MS6w^>ySAC7)Pt^tQ_O-*nfCiEB*+) zI}2%lX$o%BQL*4Y%pdi3#LaT7Ljj0uvE_Hf@Oz6#=;-SOqd zy~9_nh}xK>6Tz_%NzCXl<*9SN#ML92L%Gy59`YVt?`!tkkIG)A!d7GAwg(S6SWUCS z=|RcBSF3*zNq2i}+wQ-+a}a>`04zw(U0S&|La;=+90-#l-R zUy$+HWu)GDNdW>#X&{|&Gi&=$&Be)m&>kd~;%%W@I7f8Eadx=;doEVoO80LLuc|%~ zFO?B2uVxL5OD8my_~r6(Odv=(D!K)}$*95f&7K>Md*rY;FcEBI6C{IS9dmtOZP|bu z??U6t`kef4tGz}irpRQa9x8|G z_w#Q`zsS_fx9oZfCe!$nun$Ucm)PvS%(*)3q1%_2mv`l_j_P@=g!wd$q2THIhvmU) zjaMuakG?7?h_DA1RV5@D=@!jK3p7>WWdcxH*03XiE+wZ46Puv@22Zvdy6a`E6ACN4 z4{s}r9;b`Amt1`>miQ)R9nUvkh)b)JIe44nF=x9MMy%$nXXGN+7UT7Cj5C0UIuENA z?2bxfGkW-usHcjlocl{Cfk>}IMLQ-#f*s1|q@AuvL91c}eU(oLEX0ADm2DZhXIuHb zm-nlCyf2qItjgdRt4?I#LVe!;JT1-?h^Cj^leU*D9*XK6A0yp?Oe+{ediVWNsdm0j zqkrPgMnnz|t@kB`p6P$ri&e|}j{4DHVYm!tS*?g9t7d(ys|zD=@tboG`o9vj^`C5;t- z8xucqpnNv#VT@zBqeHg>Z|gm>nYjvBrHV`LrXn3qX7Yo^xee8HUY4qe2 z*2Qicuo)enQ;$YaIqFL?eTyCc^vE{WWto!XX*`4-w?O{(rAc>2VVnI&v%|0b!Na&! z9Zh;KJTI(?Xz#+NN0y>*Jp z3B0{918U>HJ^BQ8d=2Hpy(ZrO*E0ADfh^|V2}fB}{vL8wwji#`n5 z@Pr&FpT|qOD!w4v{V1$0l=zEFEoG#Wm{vQ7CcyP0jd8TWu z=j%x>4vTfa)%w4^P&pi@fi_Cb;J1ijA z9I*D6+TrEOS>6r;SKq3))cJ`JOBNK=yG$92R3b$JSE%O0U6GAWZi~litdxpuSV>g2!GjV*;My!Pj`{Y(Cvb z<5HGgzmW-4-UzYHy!ZUL278F zi_aG9d=8IOpVbb?Bi)(ttvWp|yOcTG(HWy?vLV&xu`K2ikPV>{0fQ5=EpAfeM*^w_3itrmYe*Ibs#(`b5iT;NV)!4wx@oHy>Rcud zL!*OUkm~nM<;l%|m~}9sr6HaUNtLH*rxIwlBsngva6pW==kS1)@;qKLj(k~c=Orxq zf`Ckzh?#hAKv!ZUrY?vtmq(-q)I@i`tB$FRQ})NV#3GZB=)QEB%H?e2=@|O}N{MiA zZCrZM8ONwIb>xDHen%a;o{Tf_4xI9%vl}1m^E<5;&U>!Q2T;1Pk9C18Q2p)W#}re3 zvEkc){iKaLkS8-}S|tOYi+~G?ZQBu@LtXHS+KLhS=J={sbckF-VJOMniOC&_RZqP5 z>5LLv;Nj~US?T(sU^eAgaMkGdMb+#=^+U;6Pkx^Faex%ASA!rN2xfcG(m-Rl=moDa z`Q~#DobF`RS*jn1mtuK>G*SY-@)7a7Gcdw6$mpN_Ye=g{!96=1To8=V@aIIVPMp}&BVo=HQNAM9V+R~6#H+{c%H zU^|@kC1Ez{26Hs6%*^2;QadPNhQHLhVmU z;KQaQtJ!|BqVzM03+KU~ReS`@lHlcK;qKc{tETFVBYbllG!0lLz>hmsBNApNy!$Dq zWh0A{15SKAg8mw*bd4!aGv)B zwmct#*fI!0fg<&DZ-mqohFa6Oz6q~o3Iy3IrsB!0 z9B1in)HcfGnj9sY0AK^ zUR7YWtNP%vv5t~R1zf8*UoKQHR7a_*u+1TWo=|6Uj2Yx*Xj=$H!}TJQ2&|2V?V*mgk z`C7`kP~{XIXYFSl1>hV!5HNUHks!Xtc|ES}SgGi?FbFDWwT7a$bWttY(+*%UTftRU zbcV+cKWYajaj>YQ_=<57OUlyu7|o$2g&R+CmF$0}I=8eVQS+*R7Vk(^9Q<^yKd0B~ z(@Y68Qx$omo>DkFaK3Ig9GBY}uF^3Q!fdnEgw*-UTsyf?2M3YBZY@Xq2S)WtPKh59 zP}1I!A>)8*p1a?sF*Dm}oBG!^C)FEde-Y=LzdU~mEp*&e*4mvI^*G*I*PdBsCt+Mm z=d;zCX$6M+SQ_11Eiww-iFaux2rUZI*!C(9PM z+UnH(WLDQ7ir0sV_Ppc)qWhL1YzV=tfMKvjj zzzj>PUncOeZ)2V32fQ8Ofpt(D=gHC11D2BoI|fj0h@Mk-6)OrTpBC!Pv6ZMpi@+k@ zwozC|&rHC%ekmr#216Z;f+r&LVPM9gjyO5V3Nt1+GE0(#3(eE4+?U8`^;7^NL}PWg~Kd;PX%09wHMynFOV-8K3*ch$ zt(qS@OoBbFcN;FP;N`xDj%ds`)qMgkDXSF16Bp# zM=T^8+L-vdR-o|&TTSCU&%P&jz@H$V3VV~?;{0RFRO)El*JGSY<=ol*(wO31rS6n* zw!jlk@o~o}$yxh!S}$&v{2EV5Q<8aXHiD1ZZ1r*px_C(M*gI&BE@kK|g;S5;LxPQ0 z`>m4es$2PGV#_fO?=h1a%F@^xGAh{tq=)yOvKu?C6byZCe9C=YGJzeFk33x?VTQ@J^%yi)ekqH@&(qE!Gd|yD15_nnfe>F^Z)Gayx%l0j}g0ra$32vLlr! z&%voYnKqF$4fjjo{7EvWG{TCHkR@w`2gHcDKP#Z+=tCfNf4JjMild2X~BowhH$c=`P-0!2to9fVE>^ z;l&qNy@rquf1lgk`pp~9JrnWytl#kBA1;yNYsMGR!h7&dzfX$8H(O4`3zE0|iyRHT z*PvvptsXe;2!b}Cp3iR3&2^T@G>S{eoH#}8*v3<5^7K*b3@lUEoBlRW`AVf!&OER% zeS@>*+@6xJjOuFiqy00w(Y&|ZeH|u};Y8hd(XR*w{P6t|W~pzgScd}IP^qL-rvyUm zN5S+g_|fri3@#EqE|9l=qgp{W-$(vh^M1dFXdJ-TWrzf&vF27;?`?^L7ZZ8pBqCt5 z@DxrS8VomRe*$jY%t3#@v>ydK%{ye0w8*>U9E=+^zA!3$(iY+bHdaPIHqJDc1B$D= zYLz--z-|CpPS_Tygwkd(7AS;%UOSM4$hG$xXeV&NW4PTLf($#M!-O{A z_D{MUSynzaw>24lb28Tf)fae3?>JqQg;wQ8QNwpVCGxM9;mXx?*NU0S8$={@}Rt;&(8Xr*3@jB=cpyNWdz|DkX@vZ1a zvL6~H>y6oakg3+B9F(0|nZ=w-6D|sqP&W4cdM2nWBK(Ym*>F&~6y$XtYTWd(3REZk zJ4y8^UCw7QWL7~(uqjM4CL(UX;p)z~l{Rw>{p{x@@yX537_4f6=t_LeW6mn#LtUDr z-6|;HEOmdqiYYMDWcaRkpY$XYU&F@9tt)Ab!ne&#Ia4-Nwg?#|l#7L-^uq9EbTRN@Qo(g7dtzp9Aw*TH#L`1LSf#RvcyJu3c{= z;jmA<)bWA(ed*XdOqD=-DP;JXH}f>*^ewX_{2MF`DaC?=3qzml&7Q_HsW*SbAYCWM zT;gm%G9oaOns%+dJ>3J$RZSX$i?}BYGdtq zk-TP56f>fLI6s1WOCN|v&bRfcs+e!!Ad8t3*4F9S@;l3?yPsH+fXyhkr|jo_CY+5S zLcY#<+AY&VcVx$ zX~_>{cgAA=+vJ=g7i9!#Yogo*SbNPk9Dq7DwX4*5a4Ln_X~1br0O^t^LR_>U%P%lz z?IvK2aMjQmwaDZu9}`kbeL{`Tug-uc#c^pAI;e4z4z0$Lw3Z`NbmPm-mOn&uYcpDMZbJgB@~F3g|35#}wFG{7P@c_u^l6!9MBW~-P< zVI3oluHw}0+pNz|2&FgFA~FOVGAyR%o+g!yRUP%SMS`zV82jK%Lv-2#Dx2EYX!^^H zY9B350dJP-uAg*otMw2xJA<~+4Q2?jI7k)%@qQiYt|1Y;`$nTRZRnJv7AB%Jl$jU{ zQlI+hDD{)cbcMLuKOg1@;`a@qnhR}l0kVKAc_SFZuq~k3)q)9_(eL)WN792i$In$C z2B0X!4d`i!uJ@+#3$!2&Tn(!?dw9zO_^>NcbLQqaLX+*L%&{i|tjj2|1f@(daqfEku-ab?cC; z)cA8G-?DvQRlnT$7)mSC4XoPc*JyWT4H1GtbeA9BJaxnU-P*vgP)-Dg{ghYf^>Pa` zop!3#M_wd!CjwS5VoZ@0p!mEJ_!y%~ghH1!M^olhc#W$`4aUX0_Mxd@rC@WJ=q8wy zEOP2|fm57j@(-B=rC&(*`9q$u3MrE#6BZdPLS3{6zP}8YC{JZeC$y8TBA>BcQGnV) z!TXS7TkKpmT;|NS2Ui@8ft57s2WsI7RjYIc%fST5DeyxV~r+AyzzZ5=eTz|^q z?HRco$y)zm5tvDiiPf!skR>ar|Lz;bvl~-l0}|$X!{3!|2uM_3gjVrPxr zAxVJ9L&mzc1o}3SVdS-dOb)t#$=9l6nugx8Np-nh;RK@_>J%}zb_}uyqE+28-igwP zv*vyO6P}Ws!`_a04fkVR7ia7bJT#uAD$E8t^g7S_*FizU#PX2Oc(%u8gXb@9fYsmo zHqXxMxy6p_-bpi_O;Hqa51nUKlaICj9u^H1^kGYCab9T|lc&PSV8`tOZAm=()j?<3 z=3Muu4f5qOT>_LtyMXbmQd8PO(rMs4M|OwWay)et;!Dlt*C4u=rir;{!IW` z>+&FKCUX`fv2ioo7j6E{a!RThq{8_&*w<|V7ZC53bRBhZwR4;)x^6MC04qQBeJ8BB zbT-$g1vzkOTJs_dXqi0dX;pKc$e|)j*-N<1*ab9vK(q%r!J}nPrIL$x$fkrb{ z?&_>%i^v7xwpdV(Vo{}d@|tRPN9kD|>kg;nO_P&JxZssM`P@mlb#g=lYQvrHQY2h~ zFB2YDc+PR?2JW&FHo}ND6jznXy%E*8%9O{#J}xOh(Uyjr5B9MSWq^%lgj4#A#NLNN z=mglrW+@wXwTICYR3-5e(LL|Cbhvc54a$bOt7E9uNZ4{0s;pkV#|YiC{0_1{mPUT_aw4BB;u6T4g6e3YwhIm^J^z6$A5Bt=DkoUFm zWn`YfX>NSW`R)_Iul<9kpl_>E`ykt6o=nUVp@i^}pIP@F*d+!bhR7pz;q*_UeiU1G z33Te4=3jk%F1>2|dsRHoZ%69Rng^Wf&Ky%Dof8No;Gfk+>b&Lbyt)(4Tmpc13AYnI znZ%-(w&MHgoead*pN}U7jR;PCNp&tbIjh*yiTrC?w`LP1s$ZsF(tY5xp2l@6K9a*q zl{T^Eq;6;?Jk;NX_xH1Ug+KSsLmocz{ReZ#iQ9p41QmhEe0{V~s4v`!G-CNY&-)j_$-$`Z2A=TvhMw&&8CJF}P22rSB7{n;nx>1s-}E zZ}f#QVC_2~-6wo3!VJ(5te%CZzolg{Qd6jb;0O7osJOVd787B#6bj6=Y{YQ05}y=y z$%{Vq!BalPY-FHp*X&8WlGGN$7)ZPIkv)t3@Usvf6~P^BgWY95T(hu!Ik|<>EIeTx z%AvVZdZgEYqy019(WO5Wd|vEEvfs+ysaIOJ?S~TsT#3F^4)CuT9yjhH=G#J~QdF3- z;eg$Ag({A9Y62=ef5)B3qgHN@WUbnE%16(%tY*N@Yk1#&a;7EH>|#b6Sd7I z8N!P7Sfa{*%f@V6vx{36Z4W+s6_u;E5n54&RNAnZMua@CG<*ef?aFT0;Qixq2 zbk^exdesM9|A=m3l{K4Y&4jj&o9V>Ma}eNJ*oRsVOX{EvK5G7*wU5Vb(VSe!0n{fQ zLIem>pO4lBd9vNEP#N_S-)E%%%E~8a!=3E{#A#A;kLoeKPH8zW?);4I9eqHU&{eS3 zM@ndysk`T_2VyYlHy>q}Kz}!P=a?0b7#r(3%*JvHFIFiE2GIP>8&k2mkdEX-2))sO zN7sy3v{;Z)#?~SKr?GJFoETmYa^egC?8}QT(Nd}>sofe0E(HEYrr%pNChVV<&Aat% z{^(K+0JQ9{U)gVW#uf=tws>z}%j@5P`OY?bW>42Ti4rE!gsCq(vTbx$E?=7nzbqAF zG0caQ)VrG_Fy<}fTXBkEK_n0TcEddF6kf|Nj?-&t&Oa_6{Jt$^scgIw!?%j6qyj|6UpO-dj#S|I&dwv8Q8lP@ioRx5M1 zAhWbb2^9>8pJ)pTj}c)w+}D+0`(1JOWH!w9Js-5aFLxB|9s*=pE?%lP6cTx1q${#g z0D3UqG14E58?VOWVH7@L|FK2XK3uX%CMKqN6%W`85PNdodF!V;y8e)@SSge#g7LQ% zeOR+DB{vOazHXKxgArc=JyqO<(;55Cufd1Tx!jK6>3sFh>@OJJ7j`|3Cr*hJc;xSX zzVx?Z`F}K>g##ebzAaXj9<)li(0UH_iZ^~J;{Po;PQ7B z@pH*^Q^QxF1qbBX0%O%RrwStm3m-8X+ADJl$izjsiZZSSDxn76W7~v1fZ_kcF3kI*h$=sSr_qY*){`C{g$~TD&{DEw z%biwNucQMsF#fNR!ib5n~*_hjzx;)X+-9pMQ%$K5$GXk5y5rw?Hs->$f|ErIS1UkQ+2Z zuTy8PLb62e=`wr(-por4g?VYWD&&TJe|-EjFb-IL0E5N%G1PplOjv2=G&~e5Vl$bsY|(UK+3#N4*4#$HNMI;zWtdT6&qd zzkcUE9Y$KP1mHLSi)mkvoe=XsoivLePHbVly*3Izzo;(MxOG_=@xBc>vJL9osPQ}V z=<>8U*s?u(nZ>bv_1v>Ai_zobptiPt_Tx3u`Y)KY2C?xQc9$n^=Sy&rEis-Z8C zJ&Mzv^gGS@{iB>R<13S)0ot@Z|Amsw#Wv~L&e8d&|IZO36v(R9_R;HjJwuA1BZyq(6yvsm#gpd2u6NvL zv1a}O5#EOo1RZ7hJ`kr-?piEblcnNx*t4Q^N_F8nsTbtNrUBeByBCl9da{FoW9GD^ z`S#NBEYTHio+KOqzv-6tiewsYOsm!J{SRVrB&QJnEE%$MQY%u$~1qtt39&4d1Z_U1hfIs z8S`8CNhNHmohn7gft|YTs@13aPM}rl;#5rLTgx^-ok3D2-{ZVZf~ZG7LNlnRa8OH= zPe|&cyrD1N1XffP#8FL3Xlw)>hH_KE9tisra#0p*%u<&Qmt=y=29O%5rB-Uz>V=Ghr&rZ@d#wJWVxqHXHQf?T@7)l%h{#)*EH5uR&`{SW~m z|Mz*IlC&j_X(h#}8{K(o5);>*vAr47D_n>3AEfK4-t4$|^)KQ%#cnwd8ioWq-!RkQ zh7db~2+n4j;hyBt#+$Pl`P`1zyq2;Fp8C6mQP_MS>FcgnFEnUIUPhxse!S_I;N_>ldE?R-G>OIG>!DdoN=iJ@CS`)GB!m%{bxoD*sAqFRt4Jgea6j5 zL!eZ}%DqMUfG18aWuuc*?C|m6s)H1DoC4-O1gH`)EtM@*2!|ZMcWlVm+Qg>79k;~i zB0%xuy!`f>DOV%2M&zcoty#^9qP`PTeh@jetEl7DDA(NHW5%G&2*0IEg?We*H77c_%|sNEgHY@$<<{;_oe@__#Qo@ zFcD|GtMXZ1xEDANRm^3Z6~$|>EB0l1G$W<0_=OE*(Q-?=vdnlNmV&@xG@n?qhq>~! zYfshm{PMHO08?cpGV}W~C0L`7Wy{|z82#x_4A-F|nUeW(yI#@tp&qWwf|E`Fv>?za z>7&_`KG3|1G0lIu2Ns=8cr%Qv~_1tZ?Z;;(WK!cMeEL^Wwwr==+ zYyMCSem%DbC2^LpZuK1y%1ShUfAnB4UpsgE)$B+NLo=x_xgxh~u0UYgM{zXzKOW0b zQ|;WIXz6P!6JIjh(dATOZp2d%cki#2Ag*>98q_Kyyw&)r@IeG37YBZwyoLg49OcsR zY_Z}_hQ9Ihb=@S?Ic~6K)x6d)9g(5-D}_NA5Gou)2R;1(4MZ&-KyTjZ_q^NZ!?Bh( zOl|}1;qg{KJK@ng*$J5I9kJgxe~0RayiRG)FXOI>RvRMxEuVyD4!47Q$P)Z+)-iH^ z-M2u3)tZzB#tIZWxTMXp)R+cS4kI7_vK?N^s1PC?8OA!r{8R?Rs7{pw9p2FZPp+ZY zI3v#@;u!I$cpxkzITX?mkJrG_wHyC}&SQ2?fi*<}2dEa6W?d_im$8Fg=`wY2JXZwpMQnDal9czw@* z170CcWNu+!--I|wo;s3nF?Lz`JVIERSSiXKcPybLxgxedQ@O5bVKCee&t`g? ziR^+2dFal-)0Ly!hy;zrEkFl#Fup+RyoQ!ksJJ*~j@>%b#jZXA?M=2AobNiU%vPul zeGNPio%6(CH#r{^vP&m-7hE3QCY6Z|L0FWo#czL>+y;FV`V3WTwhvVhU({%#c#~-9Fi)k7@4DeS_#+%zhI!^YXXp>e6tS}%w^e< zrbFV0ukj79lPi8=@hus~>Tq2Lj|TmtBVDA(p5SD%u}hU)Al2g#W@hG-zV#~Di<=P&*MzZTh0wj zV-rff=9Ec(-q8AUPaNquTT6`V%im?raNcHKf@g1OR))u4FJ)9aCSKf2+ zrQSvQ`RSHKWVL=T`Ng;2nX(-A*XGiC9#B%8wI{q=8Jq49zxVawb>dBanosEZR%(l^ z9($K8kO?|R8&}`eE6gt3N{{d~B_;&Tdy_0jr?x`VRs`#5*v+`&As67d3Fua~h61Hk zI?uESC!skhtO~CbFonFz^vb(LmlS5~A5;E}4MUs;!dgO{LZ;_O?VycMjNKG+!GCiV zTsswq**x^7@vdbPFi%~lvrbBU}lxIg;!2};k`1zgZhJ$R`lwFk&GazceDao@6SFgKl-7>*FRZi zOvSo5V9vKcHZ_ z18V324Mh#QKU-Nio~8)n_1D94U&E+Ug9|ifb?8229oe#BUl6FJE8n#2+R=6|GK7PT zGY!8RnHiwDH$Q!=I69YeOE9uRso;L%fcCIl{*jyegtA!D7xA41PvQyJ(ois}k|d3Y z2mUp3->Z^CTyv*x?$xY>n=V7F^m0b*Dis4oFT)B`u1#ntctI@S0C^2T9=|?*#Os22 zeZ?0TKTbsa^83g`+c>Jk%}l|fg4cEwhIKVd-|5>#`z{(S6`tx9XeC;Gkjq<0A8Iw8 z?(3-!$Z{xR3#2-wv-;u98P3Vz^l;xg)g*+lB#&wOs9RP+vSNYPI%+|jXXzxLD_2z$pVeFcB0~DnoR6yVIcmz>ROa*G z;~r)g-Ln`5`n0o0?9MYbH?cXxoKrv8C2f5SC@$}!TNSpvfwZv95^(ssUyP4 zP7B}qg>#%a0=)rTD(*3@wBbLm#$Vcue}NZ=@7dqzHaYoF2_w!q zQ8CbK+NP|%EA%bOb!_exTxLmRW;eTxdZC>Rbn$D$&&?X0%b@*@X(A=zdUU5*?MsN- z>6$j4R*~1os&QqG)YZhPZpy0S$F8B*OS>!}Z86n`^z37K*VJ=Ph8aDYp6^XCy05i; z=Vf0N1l~(Ra=<>n(O`DHf?Hp0N|3c;45dfxi3x}MC#sS>X5nP@O^R$C5hH6>aOHRa zD{eT!D8u)bg|E~FTSWWLwl-JZ z@C}x^{cWUeqeAIc)01JS?9~*B`XHa(gkX){mbXgir zk4D7r?MP|l-g}Y~8)2vI(Hgzo_)QE(KN``cc_~I&w=@5Qz1HjCX^aPoki@k?@iS%T z>(;Rw(}FD3f3!18$F06u^0s?Vr3QzV?{@OP?hi$1BFL#(G-FiCJBI01g@yq9)3l3%$uE0`ZcPTsTV4)aWZbbqE@oUuEhaR&^1z{ww2cGqnr9)rF}egFAEnzUzC zXZ)$q=R1Khsnhx(+tEyiwr$^wEerU6Gq1f944snno#!0?NB$YJ&#QXscOG&KQuU{O z2%$A&!#^E<fpT%ol)Xr|MPiT}@A{$`LL{ zW=#$cBA?WT^GD7Ml)iyg-6%183O|Ht;nx=56&4ve z!b}V5>(nJspxaJ_KF5;cB{41hwAw_A3_Y!2CWmK`kGRat%u|`a%M#GgH~rY`AgQ-AJRSo6^ov!?y|w6clTfK~l(bP@R4>0wiq8nqbh;n=D!)m){-G zQ!%1~g0aFV#x&(Zz~Qmd+AqH|B!-)I+d&zzbzT=dN=+&`m5n)5w{FP^Ud|wx%X-@a)I!8QJd7HL}=o_mO723t? z-3tTfLD6`Go&J@=dH4XlZmJ12^xlp1s}93fq@l%?W=-?gxT$?YX7A}e$4S97QDcpP znPM6ATc_{ltVJcJ`RfTyr`fX4WE2g3(&0gt_?JL~({d2o)c{v%J94Z>vRv(OX5sei zfw7s~5X6-#ZAS1dBg( z6k_h*0sVBwzn7dg0i>`AF06~7+y>`mhw@o%V_8eZm}1g+k;sH0!6j(HxLS^&F#SrV zJ6$BTu}8U?qPkExRpLuhh@)L>c8>(3dCIH7VOHkPooZlLH4mW|Z`~U7vmY^z!2jm= zb3Cx(cChCi3~rX~ziWkv538(IpfzvicO)1iGyzVLDfnRn#R_R-#lobwhFzD7^J=eZ zt@o{CN;1C{f*rYl0Keq3av>+2U}#=}?F<+rm|f0KmW13r@V_nGl-?4MCP7=-Th`W- z?VRqD>uP&qLgd(wBL~S*IbwYt56^~ImJRSzj=fx7UIa=KNS&=4f9<3s)Ivr3xrGWZ zdjA{OA+@6D`+QQqc1<<-q@@-9&do=*oq5U7k#Qu_nyu6%!se4bS|#^myc53g)zPXe zWUd0Oc+okn*dxJug5$?M4Qs1h*x#fkg34u0c}%?vwHh%>*knB?k=T7)?OkB7Ey`W6 z3Qw1~6vQKd#g7~gQqsSL9=<`*KN8B-Mm@rkkF|zf*oBrxT@`G`Fje+85a|Jt2C1dF z%ram0N&wGtlD+~Fc1$MVtNyi4<)x`=`6L{k zi&r^1tBh`95c)iWcw;iRzh9s8!BrSs7JcN-K3<2#XBjct9xpr0VMnOhBd?C%+r}F! zYBo>9!4Z3#Fdlie2;o?&+m)M7zJ4;7q53wRN&6SnU03#RU|o4e%QdNKaY~cN?O2{| zCE5+;rxHlFD|x{4%HCa7MSBt_Lf5oGR>Pivb~Sf*dvFKRnB|Md)l(%b-6pEAM*7GQ z-d-Gsk$h%zB>XuXbxoAEtp&Zt9l<9*E!cyi`yj`WH~{2@+6!_TG8{E~D&CVIcK!dW zK7xW;MUu34(nUkLK#A#r%d-uJh{D-xjtld8KaRTm@lUou>JKl<|EmZ=JJ}~dB0E~r zqadP6A~B1U)8f~;D7K)CL`4TE)Z}3_*hf&7Rn@QB?)Ck z#CXxI{64lLN?0?j{^cGorqI@dQ~4gNzrg7iKI9(dGxNE$u`QkGz+gG|6H}dn@o{8x zUb<@nl9F^d%eSP$^qIu3jEwB7V^k#TphR@m3(w+|vTB%%KRYoC+Tyd6-V&ZMAQNZJ z05u`(h>Nf3E0WVwNGW)UzI~AR{){N!ev{+gM_Z5fqNYbfdzLOep0)gLM@fy8pB&}{ zkRH=KB0+;xFdTIO!@U=;?!ssVLH?lUDA&C5wL*{XZ%m9903Igt8`BlCcv^J0eV_K} zn}mDd2ZQlk>shg@j@L4G6rgbw2tQwrun$?g66>o_aOA>{ZPOQwwP@;l=uc^5Cyfk^ zF@{3?$q|zeCN%w?MMue5$ARNTeEWa3%7txjk`{zLRh7WC-TZmHq$G3s&V{O}BkL?C z1i3b`#jE$Lb>hnlj>8qtqS|eDazokJ5!;>q$8aOgwrB3(li)$qSHD8ID>}s2q~oe zXlUPVMyYXa!r7y%USGy31Rvom|rv1L)GZq<4@-PNFs*O}bSeUrh z-}B#9VX_e#`6N#(munX`pK{m;K;jCn%T~!QH!X{+{@NdSY)G^_$V^3M7o}QG#ePhE zpTFt+GEC~VSRoOI9%sr_p&l&9&(31=9{pz$`pXV%`C8SUU$CHk)St0gA9UmiTqGx& z^O>k;6~=sdCvfPkACnYmg9I82%zb&czEZsbYcvS`I9eBNo~o3a2#2q}mO-3d2s07y z-NPBbx;!Ci!Zgy(?`@v#*l}|C|E5F^uVk8L^3m#!*eV8+eM#X&S(pZ6f|!g+hPRQ= zbWK%-&tS$1E?X3EptX!AcR3}p6c$dQih;4FuIgc&d6t+rbVBlCQDrzZzceyoHSxyDDsm@E6F0sbwn z-8H&~#xCuj(f6F?Owq&dN}lBN?-NvV^_@+N<;z@uw-JJdS6(;&QMg%tE(&BQ=%Z35 z@lNBE)?~Pyr)~ih=@XLTs%Y>fnMT7{TDAv$pKZG4oKjGKksIy#|`0cztJVEQUHgPoylE$@55}L0llwF0)hZ5g)HO^ZBNVBJW8jw z07=Ls`s_ZT3vwgnQ}j*`GSfN)z|`fm2LkSkKExH)W&LUdR|Zh40P=;U><(rZKPqb1 z_qk8>x5^%V=E-WKcd7pT1%*Br99m(RHz1op&HDf*X`4s-8trT405oT2BV{an@T| zm3#8bB7o*!Ae6~d-pvQk3`kYHyHbS3RTax8Ou?#!1PbE=rQKMWt}4a99Ngn$V<Ic0M4t3sn9tK3ue;{bW24|?z z^$C;*6x5^jw^R2^4JCC6>dV$3VQ3*^){<%Nx_%pYHEGGQQ%3vY=-xx#3;qo5?2!$6 zAtSG5$MICpsc74k-wmsOjTgM_hwNVF@U;t6_M$WG}PHJpV%Bwe6%blKxoD*=oVwPIoE#72qsiT1<$K=M3rva5rUQeZ2`&y$J^(i9z>QDouQmEaa(X5J` z9seF>oLh5qDWNNn{@E&~hu|zTza4Ug&xKRb6LaW~swA^~);#!$0H0`zdFyz`_|A>y z1Gdbx0F|q5-GB1cG7LZw8%v6C+OO!lPqAEF?`aZY>{A)l02BVNre+HIT_lYFx{rmS zD7%eVh6|b=M8wSjS$Y>Y60&j6l{SS;K4WyDX4Lo#-oOr}OC6oyXr%MzJLdh_5rzyI zMn4G@p8VLF_KcxoWg@InIRep=67o7m?uACjdRfyw=|9W4enNrysTTIk4+Hk*T$OaU%FF{1kbO9<|p{XSXJHrf%mmuZhhJKdE)EfzIWPi z<(=Hjf7vTF_yjL>)lAVP-3)}30qk|(royrlw49*Iw_}~aK;Qi1gr06ZAVDkDmkOp( zOB{|zyN~pCce=(Xy0apon4Tw!et6s)xBYNw^66I<$=pZ!0c6enT7Hj&lb7Z=y{Npu zn8w9I3Um)s*$j91+X(8-1z#UPwoFvT_CXQ7ps;5R!MNKdK;F+#Ve?gpJhau2Y z>J>;O{4!?AK`Z5p$$tTqg3+upcUi|nNkV`%kb8Kyxe+rPw86X8HKd=MOE=v9A^(K) zP|$?=cAq*f@;2i(#=UA{@Hp^9pe0M=WvDqE$DroLNj|+J{|hg(US%T)*Ju-qaW7w2 zYhlL!&`@2tyQm(v<5+qFu{f;Df$b8>js$h!vclg@%NQF(r7>BtjB~5pH!2{DWjJl> zCn7sV5ct1ofT70(%@Ck#BE*lb4)yvP9X0gr*xF`8Pg!{mvX*3W^Nj;8C!qB(ylp&~ z5B(5F1+%PfpM^(ctz_KQDq8-o$T3G-jv4vEn4K5{&VI-UVh}b*p!v7UMBGgMxeJS{ z^=NKN(1*$)2+VE|fI2^U8nVh0!>;?a7&Qp8HJ`tQZ{*dq7>alCB@WO2_!spGEq|yA zJ(@f45qTU{kI1xT z)>9=TkH&b(`t4nb-+!VV=Aa3@TTRaG&qYlu?yQWOyE)dz3Lt{nJ{Lo0&opc%%7 z354hj>Fbt_&4a8VS1~Ns-N?F|M6>X(z|25Dxo2LRuMfJ&!ncz%9GM(ovyt2I^L##( zUATzx;?2JSIb6oo{|TGUagDGs@}Ya6eRl}(j*Q;$?Oo0PeM0rOopJkMQl*M}ky_}-!!hwEE5f1J;5#IYo7 zMcem|eBg7Z8$Iwe!XajCa#zM`_0)Soei%sM!B|K?zz$qpcNAUXUJ_|^IW2@$x~G0O zr)KWqb2nkXlV`rvYP9~4SmA6P){xh}h93PKN@`QWS?wc|1O8WkDnCP?3qo@mj^yqQ zP=zhSeo-oAA^vpB+HQ>rJ{n1wBlA;wGB6W zcBCRL?vx~T=F2Y3qFb?1q`NeECONT#N=7>Ddkt1#va~S^;72vguR2Rwq4mQ)gSrHG z<&&bw+emTHm_)I=@8cSodG>^FZtC>X2Rhk*e`vK@>(5nP5>wjxq{-@o3HE(0218u? z+z)2N&Vxx$$?6Xo!{-yfEwhV(xn^S75OSy`?Ul^~+OaVeU0V`cg9ki?M|spS9+PF- z;(+K%A>Zdv|GC5D;zD-byrD*WGev!56!-9`T5uaYZu~)&?tS@PTbjfwkbwdfHm+JU zEbjD``6K_F2xV5R16L4-{>*%je3f{wOfCsi!q8)Pq1)vYN*Pf?i5FhcI&1V!vR-$` z3C#>R%@=b8YFOmi-L7~=>5GP5kVLCCn7MgJu=&s?o;&gDt+`;9GNp6S%c2xRqX=omPqlF!V@it||Gm5^WV^PiioYyhN6nn#T>kOYxbXm9 zJLR#*>BI;u7*w@N0an2yjd+^`sz(%z?iN*IdEamPg*~>+54k786hjCi?g8H(nQxNR zC3WW%5)Ld-2{W92tukUqRsT_XVXEve)gJ-5l7>k321H+wGpB?GGDmxuIN6E=xk{bW zfbu>CtYSxx3D5foB9hDx2c(5@5-z+|ukKBFT7Ursny;mGDkk@G)sNdTg#QD=QC&x2 zQ0e-7PxLjfYmF*tu+BO!6Agv=8-@fO@8z%xUTH$PTNsA5L-(yFA&n}5$a(TmpEDNdwsVMW3Q@_w!&NQRG~lNTqe`7LnP`BatSj^-HIj5 zc$PH!^-OiJaXHRmF5^ng*`2Yek~t-ls2f6ClZjfWyS80@AW7r$ad;E(o(VU!iAHOQ z!j4xxbFH)cKP7m7e6zCAVD;~rM^-8qU!UG0+-vckEkcao`2Cejx&4;6 zy)td#4UWM22;^A;e+tO)Q{tZwKiQznKR2$U@3FJt1+`Gi@`GXkjo_{(3D2dHu`%9(7Lw9LATXf}_g6U2W7zlOu2G z)+~wiPZ{aih(X&>iQXb#A5o2Zi*ZuygcRMO&RuB@*mq1pu=l1N08aWx`Fzrt?EGrs zPCC}E!r0L|WH@-`2eU>AL`mk>GcqkIAVeF(>~Yw7IHj}{YuM}+-*K1qBAtBis$*Zb z+5e8`bHggc8zsXqfc$B33M6*@qBc2u>zQFcyi zP9i3LZfvR<5H9BKYrWDpTbjut6%r03H;*}mE>wPOS3pF_Hij{^R|XrJ0`Wl&=^|u9 z*InpLfQVw|W8*&QU&SiLAoS-b&EXh55Q#!PDx2dsP|P$hwBRr!MJo{n_;AIkO0MN&XDG^0>7Ipk7ti>k2cPYKy(9$oUhAM!OUw`O>bMUl3h2+A!h_K6$dmZ zj5Ajn{Z$!OohVya3VNV8tf zXvbrOK)9*wlK2jzG(|kzaG7@c$RQ;YQZr_NG4Q^N7MZONT0 zG-{n9Kis7CNqTVgZ$yTX@XV@vLA>;Rnh}t()xJPYTz`m@c9euu8v;&6hR`9vGZ-lk z4%28lcDeP4O4VOdW%Nmnibp5!e)t*aAMdh}f~7IbY|ddYsYlgk!4`vP1vWrB0?EA~ zRumbmO_M6^s8^bq-T&djhlxV8Z`T+&s`&|(xGq|Vlg+dH0Y;Neyj?M7hZ=N$1eTY* z`S2)0P^J058C7ZX>;AlBD2Ts+4*9vHmYv%@#+G|E@F3sI9LXk*NCAmY`L=<1P@`L2 zjL@1**|8-h2*Eqm2A>9+eUbi(< z-awA!k&3T4#^co^9JCQsuM1CuFGGG$G~fR7c{5%^u_mM`xwg=FHr-d;aEz9lz^o;N zO|iM1465rPN+iyT5^86>D)W-dei^GUJD!~!LSAs+xEwU#*`A#Y7B>!ZJ1>@u&8Z5# zY&MDb@0JA)XO?UU0DEvRb+2{5c(ZdQLu9`~!w!> zXS9~##}or?`=Y;N);vxynEtRF$!T6(9HcUt;C*?ni;j}0@SkIppYPS|Do~rEd(gyta9~(2AD?1lOd`fwdBjRUhs>jATVL&O{(EkaehRlIE^w zv2NNFVv1Xl74b|wk6l`f?WOadPc2wx@Qa~t>9caQdeEtuOC%qG?)JCWape7uP2cEb zpby`#Z%A8{Bqff^0BcL_J$!ND5Si1EB8v6N2LY0d);R2g03`78y^PC#wOJ>=By`&H zH!Sa&)L~1`Wb#mjD1%$yPVB_w2D-OH>|*WSTlDy-Q}q75Uo9ST!18>WH07RdEDi0o z4hP{}VCbrBG?tKJrX}u6ok#m8xefhNM>WQPio5xaVjHa_YHV4`j_h7HW*9tQVnjM0 z%wisi-azkY4ea!?oT8dhd*laYLpEJ7p{E_PU5!jYb@VZgU7!wMeP89H`+U~n9j`)VNpO9NB!w7Lm*T$*pndheAITLDPY*oO6h;e1X`|hTFD|PXsp_TI6(N+Pv zp>#s4UQN^B*{zyq-9Xy_%7-}~e%Jk*v-afhBO@f>-kPCqQc_uwi}PJwD}nEvqK4(2 zD;{Y?!Fu;-;VEQvUl`K!7f{2T^f(NO#rfMPW!S||AcmV`jR@~peZ>C5McR}&r{k9d zWI$*IoP_he*;_BFQ+H*6O_ypz&TYEhm}s2^yV(_AxlY4O?cWAcedX}B>HQ+hB%daY zujzbhl-&TpY*LKd4!SL7@dIyX8p}n-23(>*Dyb9KjY`%8)|lDnfjR{BoNHT;Y%Hq( zsh?-MRtPW9gc)3O%d|^4KA=wZVkg%9-j~Dy!W3~5y-7H+%S$dwJr*c@k^rpC$QpV5 zwF0Ya>W=(fQRQD%08|cQsm+4W-)Edx{}KnO836lF?7|POqEFdDB<{vH*~uM_tmymY9Cf;z%+-Me8Ci@41ZU^XE;X zig3ldBJ{p5`)bmp$WiaQ8rMw?IQfB)5J1)b< z%6-@uFxsTGvs;Vh+8ZgGdjdTLvuc6SQXIplcG61Su9ZHWg15?d&5fcy$fCUcrq5J~ zv=&&Wo&#Ay)8r4arkwFNAFhN)4u|kiyr_?1Nz86u za>7#h!PBfytbN*J0oMp1Eb{vpe664KIgb1nq4By2xpWCk2Idm+d9r~gXnIjrq36_A z@FBho32hc$O+lQvRCDZm?6+%{_~{*9;ZqCH_B$oUH4H@-B2PtR>lTQ~_`kDo>;G3& zAf^;hT82Cjt>zL9p8bwKb21_yXGp%v6|&2F0DcJ+)cp>g)2gDp66 z`H!MUN3W@zio~FYp`S?DGHOwVo2h?#l=`)KDFo<$!kCd-0pBgIqF$>2n0Xr&LwK>M z$T_e(XuT>!PiW2gdoyo^P;Jv9i2AyW(Bc^rfZQ`BEqzft3d4P9tx`!6TIlvGR5NGn z6&%)8uw2Y#9GZrG^Ys*%$JqTFd&3E%ng`bLG(VHm3pz{@sq5Jfr}K^FQ6pz*I;2%R zQj_2P!;0NkBlMW4pI_UQf~8iC%2oS3Ulg!@&1;_duCvb5I`FDOWK5lJD>RGGeHdkH z%DyHpW+Hlbs(D92mw_IFox&^q!WpKFX^p<>X485A4DUTmZh4)e=4i%KAFi(}-mRR$ik3*9o_+Du8$+rtQ`S;roKM9Ctr3N5|lk%X$M(q z?*YO?;NN*0As^9!u2}|&3Ql;79;WoUmJe9teJ%ubiN&KmmuCw z*uP1!ltsh2jMMu6H_mB3nfv%Hft>5R# zRVs78wpk(sAAIkq5;To?YIYNIXad^7l|J+-D@kn|1({X(y}13o;N^}{wt6Qb^+CY4 zb}imiNE-1{WjT(k!7j1-MbjB+U(e_=Fj$O`trl%qA~uz0RkTdv%-b6HrOd(|3JXZJ zjv<~Y(*dV}dpPv(7ZRyXOP_@kJS|AcR(wt(z8c97Gq!p!{Ba3=sSwxa28o3;kQnv6 zC2h)SM(?kjcP-I14m;j25bm~TRQ5)|QSGs0H{yjnj>b1<+|GOdP_uuaeW@O#g+tWi znK<61@5SOVNh988)T(oVnl96Qt1=3;HB&50*@v%JsUNCg(Adb?F~O!!RrzTWTbi}% z(rDy**Ky}RV-Fh!by26yQfM;p88=?-J2%r$zxrFl4=M)vUU!+w6?iXJ0W=C|83QM2 zT&;Cki0$_CateYbwV7PpO&We=jH{Y5o9C z^@4ctFpUZqU^o`o^o_i75K&Y$^?ww>!UUWDEX-|lQ=JH0Iw;j}s%wqO z){DAfp3=YCG@I8fwz1#J#4{eM+r1rXQ%B0U{SGDKsuZ1>PUEb({2>sFRCXBsX4rf2 zVd8#xvI5uo*Qey3Ea5FbNnwj}{S>ckLndkHJd9O3Og6S6ggYv%MPe~rYM4GetF*H0 zajFJ=6wD3nv=YUndK+EK3*WkmxWh!4#^$=vz5C`0cS~aRyanVDR#J7ll8N)CP=+r^ zMlROnZ{9!pO80el;U>*i_0+TOz!n$a-Jm?|x*|A|3?Gj&8;GHZHi0(~d|2>y2AZNE zvK*a@A&+x|m{wL*r++iyA*WnSbKe)|&q`n@iu(26 z2gMI^hQd4@f%6A|ILuczg5s8BOW@p=G({c45gCKe8lOUK{Xo#yD{%2UvjADTnc3yd4?YgmK7q-eMeYWO|S z1D}{l*W495e<(Rw25?D=CuX-@4k$kz#W#d5KS)y$c=VgitMRs=klXQYh%dK(WzeAg zW<+8}yJ2h(<^MY{hunxQ$H?D8^38H-0_NlCp|jLZ_3Wm?g4MxZMGNnBMQzKd(qX=) zC#Odyamw;S!Jk6T`Q86Y2L`!UTBzQjwG{>{l+fe>)W$nP*S&-ty|>Kwqgp@OGP$Wq zLB3y2C==53H+^|3&VHIP{5VUKmbc6&P4ts-c|{l2GA+m$jOL`B{GpjFxdVNdMv!YC zEJXkKSlJqnK`}}9^(CP6CFMU&d4b)M#&=Nmfs)R#s9$!w-4gf;w%RT|1R2fawmRwu z;h}oCT|;i*6py_+=@(fX?d7ce;a+Nzd@8?Kj~y(8k%|vlBV6BJ_ObAp(|@IQ)teG>}k+nt6$y(|MacI%5t0S;X=p-`%;2vEL_1V&A63a;+s8Y

n50)NmGd;@ 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 z z1e>Fl*&ASggC0v{bmN`xg0KC>TYm)CkX=!OIf?Iq{x->?&fGQ@Vl((f8qvMhsiKLl zdr}n`JIuh3V=hQ!#vzc_=?t(394TyT0t6q}9LS&NFu-;}&eksa#HoCpQKQg3EyJH( zs*Gh+r^$4ur+er3kDk0vcc7&9@7#H7A}JnKK>fUp?^1K#M>tvK)d^=AQ621{O!A|N zT{^Y2Iblpx`$?sTS)u{yR;j}@{@t%ZiAQe+^vzQo4^@-|sW7P7VA=^F5sb%`q67+uc#N zmb!1Wc2(~U2Nqtk{xTS}{2>-7iX}FDU{;mDMOZv#^=#>*-*{;1;Zj0C08SOFM*a3* zdZv?s(jVC$iCL*FG$f3_O0$i?LO=J4ng_v031fv=9Cgb&^_}(<={(KKms+}0t#6te z-tN@83XPX)(Dm^sv70gAjMB#9*`%|C(k>`9mY&c!Gy?bqEH}0*Z6z}315WOYqFHDs zFcSlMEf^9|<2-npk;5itPeIW8kS}zZSQ;{CrEw1De|2lubCWR|C({O|LMNvZCc{~i zqc-)3+|HZJidO@33#$-bz&7q_$ga)bmmf0#%T;LdGD1d$(!mSD*@}=nQ+G0Bq@IqP z@)5k2cIh;v8^$W^cnzrPeuWaK4r9&EsItAlD01Q65Ay~ki1s9+lWG_fy2`w7P?n`M z@<+}7ZYR#7P39QZ$(9;WO;v^E^4NsmoL@LEGwrvpU;4J>DjXG0C$@@3YRhobz%l2< z+Dq@Rwfq};?RK}2;YQWR{t!1J!e`#5ZHLmN2AhD$y;W^{aF$Jj9qqFjZ5x^BXpSK{ z8K<|jXY#MkKLlE@s4j6l-lv#9ZS4$$4x{ZQ>(FpnaIFJoIlI4Ih=#i7oAC7!mVA}& z?<{1Nz&6bKRR3$fKPz5p2EV#_;xT->ZPF%>+Z=ubFCUd|k{ z7SFpt&FVfr>hD|r(+Mm1ES-(8#k-El} zP8ch!I=`~Yj&yM}#DubA#P5-lTz%<Iwl;wI}TO- zbndsUI#dmv^|TAFTmP6HO5^d`p{i-6}Ss1i`eSY;V|NB@)<59`o@Z%DrvK2RBn>0Vr?4o4e#~M-fQX!e|VETJX-N zOIpLtKzuxcnV}2zPh_|8s|OJv=2omvu+nVzk+3mL9${VmRAL2?nGNr2i4Qr-^z!!6 z=Y!}RHJy0t16@k2f-H4Xk>LJtj7H=AsCgg>MPoY_BRSxMA{uqP%G??P86F8_p9`;d zY!*+QEoTf0A#fe9ZQ$wun1_^3DiikG!6S#hy(24g_E*Bs-sW3erxHHPT6ccjA7Ie< zaD9q=;2Iy6{e%0c<CgbQY=f81N~;$W~h9f=s}#B0ez)WAu)4M;Z*1 zH+Gr?tlP1I`1`rl{`S!&5Zw1{M*uV>vtUAp62EQsrTR@HBB!CwClnMXeU|_h#TyLo zOsOT5yIi?9q&kWxMz!BxRR7N}^(oOJh1mto9v18R;lc!ig zHo(@9>6Zf`_aGfL5I<6JHu`ApGuv14cyDmuSGn2;2iI6+d@V!X~S7A@T|||2!zojv|wMS6sf) z$hKCL4|7MJerv!oBgXgXEw{C7Kv*E2k_2Kd7j+d5M^b5u}-XvFu**SuWP1&~#f;-%q zDhf=m$9Om8i+@`GeZhJ16Dqa;;i6*ZX5(IICc1Lu`3ai7P&F82H$XMReXWlEZN?iY zKFwaQw_Xk%-GFC^K$-2Z=f7PRtlBMYBoQY=3c432dB=oRV^W9p*8|dg?Hyp3@oLX0J<%kGs^KRw=h)ENY{=H_^`QRCHb;5-}oJ zLjAMyiT?upR3O4gom$Rf*g$ZyPq2BGT^^}d)V5i$%m$rPB44TK#v)zJby;PJu0&#k z7RNJ&EU9G4A*?h%*leHKF8IW8`m)A2s6)jE!|w%_9fEo=G}^TnlL<(v;XUb`12wmr zZaN|ESS|EVf4QHVV@8E&Log9-8d+p~+&bS&Z?ZQTX1IwlrlCi9b$36NWb9wh#AC=$ z2jJ#(7APEGlv$7;BvEi>`e1foNt>V9x(xVke>BBZvLY#oJV z`I@P2uGKnO+D+)0mV~9J|ED#R5G~@ES9@Wi4pu2z#CzbFy{9Tl6l|tyU7R zFjD0DOQ#}R7D+6{0R>`nET^vDQ&vO-)!HWC@$KxVpB%8uilu=)2>cLw|LQsHzxS#?9eDp*5?(Ua!Zpf!LC~o%LWCbAEd{ z8I|f6NVjgx6)p2z)w+lP?IbBNNkC)Y_w|F*Im2b)TUfLYr510A_Y2u&TivtAE?_HD zmRB(O)mqZ5=Y=MiO-b&`6XoKS+x?MW(o!q=gNV~P$6E=HUu(u{%9td z9{nc4TCH>jw>MnX>22X0QVBC3sXe}sND<$1m={WEDysD9Ttpp3X2AlET$E@$H{+#s z3%JM$N-nBy$o>nCbd%d!ZC)qpK%MPi3`USxfKj%T=8&m8&R`Di;i-wVszO5sF>cr+ z+<+TA$D0sgs-ckf`Z<$mL;`=}8y|A9!;|uw-utq7N2Ak(OHIE;t5SoQx+}!Mkfk8C&ZaoGtmsIw=;Q$du{V7)$I!s1C3eba|?Lh`;k(qp9M#K|{jI ztrixQ-wY`i(_~ll(k-_H51moozubBB9DYiL#m)p)AYLAK)^E}v^Mq$&M_hDMiF$a! zTP;F)lVcIzMUiuRgwBIOwn)mPyaWwP?7Q$Fk&?>{c>TIvpA>hk3#s^%yU*~ex@W4k zUyj?Z@KDl@DO;J{)lr>t^*Ot~m0vb7<1{ zyF*^j3EzWJ2l&RK5%^4-OONUh1AtA{HAJd1>!#1^$f|=;X2TQ1@M}!b+*Xu`& z;r*k6B7<@F(A8|&L-jO){%jqu=st~CjlJ4$BcN6i(?tkMsLJZf zh`IH>To{P(h0i<>h$owxyXM1@LZ6n-{S*t6Mz;vnJoICg8tt=M7%{he?h-+m9Z$d< zkE>o!u2<~NkwZY5{P!{1z`wTMj>AO49nFouz&_4wT_O{gtO6fk;bC~8AP%}mNMMBd zU=lE&=*D{_yPnr-P*Te9#@9wbST@C#`G^2?U=$WjGRC5S^i|4f&)G$_e;aByzc9*m z1Gp}KDcFXp8_`_1ihb@U5?E7RVP5iH%YCmW`SeymdaO#`qiWB7iERR8q(B>yc6{|)xYt6!ca z!;4YuUhPFrUSoW7wzy`PnK}PC-?QY@lZPdG4;z9E)-jAM7}sf&8UMZG7b6l&=wLTG zXH5gxO%4C+^h~itEeQXl3rN-SE?C zud3z9>0pX+#nVt*+k@q<3-+j4$~KLdQ3&m|lz#T*a92_Df~CxO_N>k_iX?| z5r@POxWm-cu)H*d#Klv~6sc%fgW8c)p@U|-TuL!Ieu<6B`y^(L1rNF+FWmGN%< zzZ|v$pveO0%-(9N8!KSU{-f(C#6zHy&VDWrZNYg9&h4gEfpUv%)VN@N5%RqCNvQhl zUGntvLhmEf##qZs;T9eGW!(J&Jw;jXg1SEBG% zl7^n5o#uUtvHfdJ&(P8-HXV5Z5dEE?LlHYVck@s%b?@13er$+NfzI!%Gcg_Co{&Jj z;X!C?0THi;WQskl)%lDP4cw*H!Ez8Mg z=An;<f228^Jon5 zakg2`T}-^rKXE4HvC2i>4}j+=*=Vje-V6S{%~~0mMW9anQ3Q|(lH39fZltDy zmxn`J@6F=O?aqmn$ujbS{HPUJG-J>h^o^xgdSobZ$et8(x&m*60)nBUbmRBrOg`72 z-=zs`;!M9oOCA$H{1{22kzZayN<`CYeKt9ykd*@NQ9WekNKY_~5T777jM`0wO>u~w zZ>u$#M@#?qDEFz7;6EQWOfgFhYs0Y^JI!4!c`@X+<*Xa|-2dQb6+eCE-GQYzMT%|Q z@8qKt&ya;;St?h}@(qwLx>@4djo?niiiaJvI7*##E3gQ(qHWf)_W?D72vTq(P z{5jpKb)8W$H|_JMt<8!A597Z`=?+RBMvsdc@qK+_TDC`=m(Tn&;M-#-RA899*%@ho z7uONB`9A4h_?WS9)T?(9)eE%q<)>dkYSC|XAIc2I2(W!CMmX)L%UW$p+dWL37b&Ev z$Vg7&+~#>*vn)O)%c~ZB=FtN+0lOsp%}uq?XLBjKEIATcU1^0s4_b`vVh1^M^m4^9 zv+Mc;qFGe8K~gsZw0`v)c|r?er_WFuK;i;_t7y8k!(w6W+fLwf?B&OH@xc!zzj5k) zvySw0aTz;Lk6CYnT zx=hsj+SN&aVrAe5G0nEsrEuG9aoo^T@{fw{SxYOBS`;KXCU_6!i%3YtsDC<;nD7c7 zxz6;MBHNnLF%R3b=x)NvRWXqlh^aG|W?s!dSGv4e55jL4#sr~iEt3VnsKrSIx39z# z;4?aW#1`qayeDuQdTs6AHFTu~A)C5dSSgmb#A^qiIr94N+$PZUS)Ti6(EMoGuhLo; zlWko#@VQv-v`hg=u@MwUUG>--<5RzK`Y&kaz^JH~wX0`<9tvNj{eai+ci#_mQUwb1 z=kqPW-c;IfR=mpRvu(uwNKDHtw8LmqVtnfXiTmOW`+M%461fZorkX0#&z2@#yY)ia zGQXBzY1g+op3{k93!wY2haUbZ6-$oM^5fS&{3nxd^39ZwUF@o9LhI66f-7f3e8*{0 z0)w&RXU69K;IB_3%?yf}p=8gV3$^tUfoGrDlV|@eR-13j{pAqlMqC;tw1-JE#3pMr z@8Z=l$^*}w&~2-N(KwLYmJu+J<3;j_qjQ) zN2jV2ZZsVhRW}cQ!hb9GQvYK=u{l|Az+Y81{6xxp-hBkt@Z-wd1HQW5uy0uidZFr$ zbtN-e7SCbP_a#S6_(SPsKSy7w3I);~v4SpIql5~ok&`kYXc45fWS|V`6!lNqBJ|64 zfEi~{7eLDa47BW)#R{Yjba+BLn#cRUO>zna4&5zYNr^z2e4dS6mnaG{uB4BRSc#cc zwwz)by*KGkhS&ECoamDWEDBw}N+uBUUF`xyEc0A{4Ml56p7SuMllT;Lj3YG7^`v1x z`lo$QDN?Z^zo+r=V@Hau=FRqffaJ7fRNzL5e6Mi>c8UidkCdUC=2j-L${G2(|Vu z$Ab8>Q(ECC?I(xDGpZ+2r#1q&F*lN9(b`@pk0lezs zy>oLl+2eD}w$2w}XXnwKtR#!p&dxgXvDC><9+BT^(p$&&)M&RT^DCC+5l8lPXFZd@ zT#or6My~cq^-VZ)=B8+&do`C=E-t)`)@*$;OqnG8bU1*j#vzb?V(E(qM5Hu^_Uok_v{997z&OUDMAHPnfWqg3IGoLP@pY^af>7n4 z@?-Cjl;E!HIYbniLNhhcwX;z7g|1{!^uxlCD_LLe-UO%66>8t2$yrQr;x5-n>5Sqi zK4eV&)QU$Sk?LIp_fTdw!>Y~5uYgq}8=X@!zs?HWt7L3O7K zxkn=0nZ*`^`t|UWFZ3Md3(HiK4xJJ!u7>+z&J zAvdSZzm|VitK0G?@TfwU;cbig5Z7MI4inS_r|cItswNTSL(-;Vx9ZP z&hwCw_7S+%^}4ThshWe!eh0E?D73N5kXZN$5kfOF#K%w=7S-0>nd?!nihit}hlV@F zov-qx*ZS(q=4N_f1;Pd?Lpg)XoNR_);kXrttGAxlDoOdsX|}m8e|{{#PN$#BfR?i$ z{3TQ4pOKHF!h9H~j~>3!+RZj)oNCG}-#yD!6kHsI)O5dOJX=n+&nC_pyHL4L;G+6= zrFF&edD<-bhO;^T;SX~8(NF@Qcb4>^m21vC)J{(}i^h`=^&`+!x$?i3G>`sdH_j0F zu0ly7)P)hKvoLP!G3oYGs=H2#5p(yUL`sq>$xAH4vXF|0pq5U~+9VJERxk~?$0ziN zoYE5py~ZiYvnO_wq+E2&-4}Z4RI|BXR$lcb{4*;>Yo`<7(sTq42;~seo%F`NpX0+f$JbyV|Ib)vydxRI`iy+>Y1jWB=*jItoi4poE|EIn*2T#1h zB?-_Iz6M}q$5}Fa6;V>bQ8;QE-NW5)+m#eeLUl)!m3lLQwVyQj+Dt~7uP%;i)qT~o z*g8ncDS$7(;h-#LS&IM{O(^tyq5A8I+BnjQSWKC-7wpD4F!pvc;z6H=S_@1dPy`h?K z`kk1$OF!QF^Qk>4L99JUqrATm{STMC3cBj;iTtq;(#-9)>txQRy)z%?7S1}KH3`~; zU{h~am3ErGhp`8+`+f0tb9p=OQX2xU`TKgA(GMyrG?$WEPW5~Y6?ctmFlisj(cmCU z?P&(?3E7z+Wl5OE-bv%#$mxk#moCP)6wFDvWn>l^%5|yX-XAGr|0dqr%ehJsZ0RZQ z1aIUvr8paZJUuVaIU@QB9a(?x4kqWXRXHzs*T5%3Ts{HZmH%4aTcZCl^VW6>r)dum zs`cboN*M1zjoEiwiEWimKW%AKKX#+$-Auv=9|%ms zhZX1CaSI{HX-CHS_E>z=O<82uxT%OISh5NQqUq%F2es>ZXj;jG*`YlR$s+mPvZxRr zg?wDfWFzR_`<~46Pyc59sd%P*Sk}-lY`giS-5jp(WM6*0xhy-Xh@Eg2za3)xx{b4g zv|Uy7>k*YX@$8VV#1x>qjlz~l6X=`YM#>0^4(Co;JkQL z4;a~?EwP^OgC!vNFxekaJezg3$>~sCAPVU1bvd$A^4otvvTVUVMv=&5tln3wvbbN^F@=$s1PDbqBC}*5evoec!4>LQkHC&9*RTFM zSJ&BvBvF2W&vo~kRzY4eBzRh{Yi*@H8$vb2BrvMt4Wf@P-OpA>_}5D>QawEp?dSbN zCPb28QrKT=8Ea`uC5kGIo&tkeiDl4Txz&84fZ1o463iQkUB0)DlP_?-4x`Q6k(h3X zST(z!3+V1h3-k$JigaCl@8bmwfZ}2s%f(gc8)8l<%BxYR#$C*HMPIShf6U^~1W-Y@ zgVCbAuW{YGUobZU>#1j}bp(lFA%h?G{{JmI^6`zw^nVq68(N#p@Nc>^pL&nH_CQf# zK|(6f|A;NCYYsc)-A^%m%s(Flm;(%MuVC_HIg@!`Leg! zM=YQWOe`yej~AdPbj>Zq_7dwqJS-|3Q@y1qavmkzxSU}RW_1_VOzU1Wv8W>0q^=eV zk(H8V%T|iMq{OrS?hc&Q!LrW)6A-In@SLPoc&Jc@Hkx@>OfO*?pMvO8WWO-dZ-(XR zsqp~ZoQ|gTybrU_vP)pQiyG|_lgCn1xj{QN2r{R%8X`Jwq!}^VevKNWSsxwE+{caFXvtYx#&_PTlHzzIvI_ z3g6#a&V+twO5J$2M-315|WuVJ>U9b14}Vq}&|wWqYbOZ?B5!<8gtH)hqf zbY_q+_x`+CDwAYku*36I=J)w?;gh^u3p>A`FnTpb*<7X2sXmR6O5=!VNZU%SNlLh^ zj{}z3uA`5%XOC1c-E)Ewa))zbBS^bA5HnwXBwf?;I6~s4U+#omB)?3%G!iqUm+sl*M_7&!^b6BXm|k&4&8vjnK{nLy3jk0;6LS`41` z1$~nIC+}spT0&?H>W_#tMe-d|+IX@P(GsF{2RZdEHt{mQB{h)T4y1=V{Ddm*C5hT) zj9+7OzIEMi8|SptUy1#5ql_xLu||Qfb^QHOgm3Daj#4|)k1T)z+O2+T+Ja~S{+21~ z^!=$u`y`hLYBO;~Mfi{?A#j2qJiqliL0K2h+ypU{r;^C({Y;$d zL3c*6iU^@?b{NSI-OO7p5`A$pn$amW@;*4)l`?3ZnOReK!Z}t{wE4d-M7XR1`{qwQzq2cl zsmb;qd*-I6nBVEzgP311)Y9Xq^#fns5duD}WE*>bG*!&EVzH^RlxHukXWx@A^j(SH zZ-`4uSB^qLio3h9S5RdESgw7=?(7pU78q9lEWJ?i@^KAc9z72bTW84 z-@B)!@$W|J>r=_m+`&6~rBL;qIpo6N!Ml$&cs(+sI%{ zHS;nbS#C{ageQiXR9CSP43CvoZnR7f$OE}H+H@={a3eDglW*Z8)6}@vc)h&j` ztD3em)R+=fddr<5+3Wb?=)CoiayWap@HkCfCA&{68An9*g__g!iwe!kX<59$A?{}8j(+?{6oE*)MU=5PyH2?0)?w^9xbnJz> zu7KLvJMusnH*D`yni&|Hr(4D>b!b6NXgm+H#O+1q|2%Vexbp;10qJjnEVCe8!ptj6 z8%X(P@%bD(=%DA7J#6>@k3UT*3HQIP|AdH2d6HEYB+pVNq+naDUk_27OMCaCQl}6^LB6r8zazDP-mp*-pU>F_S(FHU z>7`$kXZtMo^E^MjK?kyrQ%L4qD>n77j*w|Q+!K((hTLHi6<7XZ`s(?zq%wa3-S}Kc zqLyGwz3R?D>swYjeTn)>olKR-AFxTPuG`RD@h8pBy|$m0u+Bkc$Va;IB;Oht8IWK+ zu3^+TY*$K~48y|rUXxfy+s6Z++)7uI@46IRlI0*%DpD!eS`F}`X5X$tTqoGjZsXF) zY1HC*HT;SQWb?_XQ=GbE!Mc8u1Fs82sJ}Ap#vVlO^{;i-N1;*_i?ZvG5zef7>D6F1i~f`^yqxVzGmY1+}jO z2b;UlDH;KqDu)ku%DM=}j!1}~ai@i4y?x``1dEj)Bn`HhN)#CMc%X!e!SPfVs|^;F za_~AsdM*Cq$8HXLN-S9nMs9|3m%)+prJKQFben%ak`7i@tM{Ev`YJelRpwrS9P)6U zfPAI%@O0(u7e9_#0N$R-M9~+orHx>R~qzr?H)L5_a8AI}m4R=D8&c z=AZE?Qmk{2&s@A*g8DDX$>2&7Qk)fxrQeD>EmOblPx#Ua=vwI|pR@i9>h=TJg!m%y zD{M27S1I~m$%|lRv>f!7@mzJJirJ@wbiRLumFC&ZBvfao-(?Iq5%gus&R)917=(O1k}I9mBo$tG46kwerF?fy^hR zB4HcjgsBHFc9QF|ybmTabkVUMemd!mXoTdV`&oJCd`S zB0!w1PK?IVU-!+@?Unz-6__957fDyf)(v z>udp?@#Cx!u zznF-M2k6M4QJJ{6(#Q*}pab5R`dsO1_m(@R1>}dQgQ}$#>72-p%QTkm&sp6y;$fGP z?>VtsNbt9`_I)+_Up%NZ56WzTu_jcG-TY)2Dx2=_ul&=twKJuA+65zy71bW}cho#{ z6;y^fW@Dfv{(!j?*H$xSYYX^exo;09l&kiS)ZT=iaU|zi?^ck=BLnI*$d2rF?ijd090>YFpq=oISq_ zVmBZ0vIw^kH;hR1ak#sf%XCxdqUc_&N$o&ocD$f)0FC?A6|R-b{&0&CW8?9avH6<( zg5yUg=3m89^uk~7B520{dtSuYl{xx>A)r)Cn#xy8=6tZc%VY`~S~VD&r8Kb!WG8~I zJwaLAX|T<5CrLb;;qFBDnkA1rpA-javtUjN`bQ_`f6j$=)P{(4T6<&sib~Un2CO5I z*1Fd6a}&Ly)6enBye)H2o-nn`e~{4hsp0}(BmVf3kk_@Ny*;}VQV-i_gAcNe)ByVw zTWY4v?eynEhOGWpx1}4FuN>b7GK1quT<)E+X#`IFW)`j%){LBakJ~6TJ`^N(tHs2% zPXbfSqsP!Cmz0bf-{7?gBP;~*EgHF-rcV9wwO-g$Rm7hnqwY3Ldt@(v-}*=&snNk> z$d1$`RT#&PWiNiMDpgk2JE2bTvf(!MR7XLo9p{N*zU_$d=#y7ece{o8IG2Z*J&OB( zmi#F$+bphJ z)PUNc881`hA?-2+j>kx&(OJga_tf%X7q~sd>KlHqrXBY_fLp-UGVF!{Umq_#68HLq zKd7DJ-wG^RF$@?!@1flbq-<_T0Lb%fDn&AiCVVInJCd#%i_!=@iB&;^(=J zAxRN=V9Z|-8-q3b09D|+dWxBUmg8w+elCsrKgHoETRT3KEV-Dq%cb@m69e|BrA>Lv zCf%RTy#%t29XBl8wt z$`}*GqWZH)3yMbTIov*-QiA&@AT3G^Q zzD6u}oK|i^Xm9Q?eLARgQ;*(+70UIaViNNMfndv!xWYuCKur6=T65kL>UE_Z^PjfB zWotbu9-nqZBu+VE+}?z_F8+7x7KaIu_z_nkl`Ed;s_I@+*8)Zm+cb7N(Dv0S=b_`w z*mPec1N$gl^i5f6QbPF9%CVZ_HQc%eY27qJ;s^}tPv~09;xg3{fSnS`_=VW9KJBXM zy%F3JAIHLIeHS}aOrmF^zU5b~UCI@-ouO%WU1v$yW}a=0kUv)BGz?|SH>6B?pxF7^ z7n2=bdGv{e5w00sEM)iz=VD&{PK?Ou;19j2h5n#^^N;ZIWFWa3N*HNU=1`-6gEZN+ z4a@6qVIwIA_sTM8q+|wlWdR4O% zUsL-(HAcK)2Hs9;AB2Q^+}g7(`-e;W9!jLp5yxX%(uN~?|s(V`#8^Y zt@Zx_qFMyX6tB{2BvGbMox1Mc4vpanY?i_B_eqZg(8%3jr~6$OZF<7;FG%GAgXR7c z$;y4cL^?N?%;Aa$r`ocwVfHsV5AMVNRcM<-9suc{Wy7NcZy}}V=(eApXf76euf@yY zxlqPW86IwKiT^kpvL-RL(j>DiP2;&2v_M&=*H=~}9nMV#x6Jb?w+tv-e+HBex6@m> z-=F#9*7d^s15w&5(F80+!oh7bL*wZ0E8V5^KqZUpZ0v-o&hDhVG8j3{^QRTQ*BwLi zwAy)z)P2m07;ospTR%_9Ta7zJ+jWT8kn9z%RyM7W3+gkgZq$G7Em#$Wiq^Ev(uYFUqkGP)am*Kwpo`!i7QB+OJj$Wf*%my4@SQOct z9QMgxG$PJ5bh|+UbE?qN=f#N@O}=v#b>jyzM zjFvgXTI>B6V?9xjTLF$2)QrD?e4Iflj~PwJjTj+3c!@80s)I+kp5SMNma57vdR(g~ zavR}&F1TG%izz?C0McMHKff?_{JB!(PqxqPD3G$Ncj2xf;C^nhr^-=#4(hgC5G^P} zj$U|4H?FHW7zcUsR~7b%{44dLOM{W(_5~p9&;Ogz@!>#Nvx4MOg|AxNIr{~{l}h7O z6gYJ?938Ip?E(P3q|(axfG-Oqb0Xq%aaBu@WM8s_P34ERE!Y{Np9QnH)VN@2TO)5! zI`d$uw384siN({j_@CG1J)}BWV|_Kz3dIahGZu;Js9nk+Uc+9 z29Z37p2UB&0vb9*7}7S~I4sJm1zC4x{Yvb6j>u zb)gzfWl;+$&?2B})>{FzikI7l(In+FGSEay3;8Wf2^JrX3v(z4_Cyn@zNudm#S}|M zBd^uYB@I4M5*jFS4X%?v&QN`vrs)0d#kf-5La7Ez8Zk2zb5!g#laZtZx#~B&;v7nf z2I&PYO=KsVvdLOr46)$%nqHi}fls_*)%-vgb%_p1UtW4T>o;MCLk!40uJ_1!*B=xJ zHDiWVG+TS&w|VZ{n`UjzDy_8Kt5koKi;~WS$t#)~8_8k4J*woRWAGO89g13_&?)r# z#se5KzA&RSab63-(a|bEGw1R12tn}r0+k#&0YP5EGQrMe6)ggf0<7|VA+aCtIgfl$h&)rQU?iR4d- zGPZEIA=FJ*Mr*uci%{~?EuimS?SU4&7@49*6~kMQb`lEb@R2tWBqVaO%G0(GA(C~7t)LLU9OTN-) zpn%`(0p?zJl+3tK$mf%+%Muh8<@B=EgczPt&ARZ)ec4<1ono-u>@^{Noq_Y&GUm5R zMM2BY^NBP+30>h?c7st&zgthrj7L*qp7W?Z>VuI!^ThLXoh$xXrjo3qXWY<0GQvi^ z-jk7IMP@!KvlB~1slLq8e))ZU_E!~;P4UZY2G0`*Qth-sCN&AIt^`{R-huQaG)lGr zkGWH+Pcfhr{kg!H=W@@a{KD}bpO@8eu&)7`=)s|jL^Px*?8mFN*HocBrUk<7Ot^Au4P}`$#LtaP`(XdN7t*F zj(eLIyz@INpb_a5{UV+cRD&RHTy;8{>Zx}at>1m}u6VV`zIYYwDjL~@xa#2-Nb)y& zt}X6GG%>PD^Rqenm{);VQd5^VGwmq_ zGE6dBS2qE@RZ&Xhllw;ImyCO4P7aV;XKstQyl@m_K5m)9E|x|JM0iLS*B8G;!v3N3 z=4**-{`8Gk?xg&qFR8Ki)MRH>PE3d?Q_e0&aSks!ij9i5U=m8=*bL?c<_nNgAFiP!&at#NAA7tS-cxK71340I-&iS!G0IUUBim0wn-d~_PE%Dq0g#xoe8rwZ zK>%`VDUz>5fGyL%nGAGAc5i*@JAd}RM zLY9tIclA9hY`(0wF$-sZJdCQ#Awd0`fnMf*>)cP1w-N6Hkn&6y?<3beGR_Daqiue) z4S3rGhMYX4Krc0aA#Z}65jr5_J+vFiX-znX+hv0XRT=7b9{c?Yf%TfLvP?T8LuAuF z7TEUbxyO?@Zs)vnOmQLkshDztAJw!+ZX1brPOp3r%H%V99E1x576AOFiA9zQSbupt zEf~xPgB?})=p$6Z>~aaM*6$`{@I%P*=DhT87icwZNDzxW&xlQqUyz%dGd*$PDX)8- zSCG`c^YI!+?3iu}baF4s45w41@ zH-2>;tzosieX~UGd(v-^_D&}QLM6JN=iG~#ueYl7n@wn+ahx|Z&sL_ObK~a z^$sQ@t9V@MUNzs*+;uQ$`ur2oM?u8;mNZGW`AGO@{YSTxS&M-XW{LHPJC@h<&&iXh zy+nHlk-Cpo7>(~? zOQMu&!)4EjoW9(v;gXh4)S2+=Tv1$>uQf)3L5Qz$)mX%UkaW{Z>rW6ukQG&TE#M2V z;n_94hnAZ{7vc{>f z=#l=-&Xt~Fr3(ef7K`^nMk^2+b`yryPlu9p5c!15@6Z2OLFtTE>)n9mHNsMincO%<@w5S2DiY zI32jlG+pYJ%g1aD8@!rX$Y(2ZJ?C<^@kI3cZY3vpwN?(69%{-wjDxK#S}p3=;Cz;X zScpmO75Tzwjl}3OOKN`2vl~n+&OX|u=lRyy7K<27N6t5T$3D0-jq+CB@(w^SmG?JK zz5zB|xbNPa`GKsij7P;Qjz5`8)Aek7(=Ix2XT%3y?3e@e`EMxax-l6h$8+mKXZ;6@ z#qj!RHS8N9{lW+=TQ*x5_R%aKdq>88Pz8`Qv)P#VCf?U-gZy}6IIalCOj)F~AuF|g zC?#zwL``)I36S$K5L92W5Z?gyFepFm)}?0JCcTI?SSzhJH=u`*#pfCv(J)a%*?%;F7kZ%hZjl;=U6Rr}wHn zY!2)zckqLsqP+T}fw`2KQVA(tQ@21UC!Y9zwCt_{H*NOY}^lQ*#8ZEPRy8%6Dgd`uK^EpdK zcToM!h`Qe+GYxVh%a3+9n@O^Fgz+&@i99@kaxo%rsPM%XG7B-`Acg7Ej1-xUptAB1rc*@rZOV_I7byrp939DvQo z@oHI>eAZ(Ay)_o`*j&T|f2?P7T(zmb1hT$XT=Hj?ilNGsh7e|)jbA?|?Sa~%tYBbL=uCN_ohTmfTPJGdPOd8$^SJxOhW&zj3l8od$C#~LLmK>ZEn z`%n6s3;IM6(d$ViXH`>lB6OdneIf&3)G* zglSZE4>dn?y@X9}=ThggDP~0Gsz`WzRKgdjz!2wG`f%BABn&0PZQGY=wbo*R&az!U#c2QZsxfHY(7E_b0RF}(4xcyO|*P@`F zHIumz$t&&1$g#zG!NCcLDa527urtvfeC&Aj0Xe7bM>4umiU6cPJi9!RqmzpPa<(=G zuyalX)mXlW--z)a2VtywWAIwRPBdZM#mLch|w0k!{{-XrT&2uir)c)`Qg9Kl&u%-lc`Uin3gzre!}?wi$MpFNwYn0`)S-gdXga zJDY3aVA&jqR45P=+Vi2cV4@sL_m3EwQWA;RO{kJidYbjW0sKwuHN;htzmDU+5vhx5 zVphp2#BD9vS5v_oXPh2d^L~BmNZuWPG(zD1wEBqZwX^8m*|d>Xg+-YEQ)%n)$1f9- zu;gMu@(uvp;-W>U1ECs-a;Q;anBHcAE?ReQhF8y`mueP4vh8 zBYFMQ=O2Y(-w}ILIL!-h>rR;b6a5jv5}WZdlz9)VIZMgmZ0dC<%7;JYAA|*QV_}+p zfeh-aNhA)=cQ75^vO_IppyFSks!L)sPAap-4ETvFI=dWXq@QgI$?4Tb$f%EMN|<{U_YEEHHHlW}|j)?&}N$q08-T+V(P zG+yTL&cmAdshxfGx5+80-GN1csEj%LOAjuhCU?ltJxPT;s%&`lh?7XSbqJcWKF{s2 z=-C~`gs*4pk|`l}$;8pp1aWW<3iS5=IOs<;3iOoON(Ij;a?u?@%My%n;pnLt>bK-U z5hrxrOD`zN79CP2+S%#fjC8qA+|8Qa>3ELu%~E)C=e!}%*e-+}33EDFl!PjCu*|m> z<8_;8Gfyv$j!7(`EF_^(dxr5qpzJB^!qVsGl>Zytlr}x2Ormb`=1$9}Gl#}u@_Y`;?+1fD&}SPhD>V7DBx& zbyh5qNtd932(g@8+k`0Rqqx3ZgNkA+I#YP^q*N_1W^F=1h$MT=f>lJ*j%cEymYG1^ zho@cV&b>jJHrekLTpGJXF)w^OlhlZLCd@0FyccSp9jVVyAf2$-^`sHN`6Eu9h49+d zslT_c`rWkLtLHY1h1z2Nb{r=5uR42igQmu&9_3caRk(-Yvu1eF|I}ER@5T5wSZKv_ z!=>_j4{k zGE!FH5wa7rV3S_b?^oNdboFzI{Kp_i$33E7`HG%wrgh&S$#7J$4EL#N>~3M@c{}Iu0XA7JoAAu0 zEM`z4$2JmgqS@f zKje#ElcGe_0$QM9CX&1Ah6&xmc24hijUeBwSszs5XuIq~N4fH$R(TKH8|W|je$46X zekfVfZP%WvNZD|p;!fxNSl(RW&ISX!I&|Hgr&x&lFQ!ohduVzQtGSjxr{^TIySeH5 z?Q;Rl%0cJ)Ythr=XX?&+hL3dTkD{s(K#UER_s^-OE}F22zA2Qrx~QtXkN48fp>~}M z2@1sF#CY)K!{}^4Ok9;zbLyb?uGi|0%C|dBjn90*Yf1s6MRM5n`&YhZp{=fdeC%1x zsR!DtiMLioLm#dJh+<|uiAo*q`rPn5P&Lr0fz0{JMN`a+A6n{meH>3g1{I?m*tk{< zzDOv=xvshL&*oozZlgGbqAUP$9 zvtX8{Q?IU*M;`^>WtsorXFCzJ#ay3K5fOWQ9~;_eFx{tw=3oXa-EcdlzVS3oJ>#YU zbUu~#$$0IWE40a90(c!|#JU9}R~9ocxZ8}dJ1`WEMnoJUIA*>CVptOXb+&Yp<2F}5 zy*}OPnA00wa}>lq&kujqtywx1a|jeLw8H|( zqg9k80O&BJE{>tkE%xn;PL?j3`_SFvp_|Q(W?wt}v;!jK9D?|q5xgW^4{26$Wei5t zN66FPOB-i>cP}q<;aL*rTn}ycosOl%xY(-Y4y;{ea-lI zTEyv6s@*ijLFYK;SpY5$8xR8u0O0cl+=AZiCdVUibW#ezmwl}Qj2yE&S_ zRY5;qYUe@M+Xjq?R~?VH-aB&UT_Upes7EgnkX}$XZi=(DC*y(QBEQbL&H-;LjJ6z} z#qz8yF`s7DuWNfU@ZEs=cKbT|v7Zi9XP}9K*#+`4M9|il0bg{<^)Zv`E=&7a)Oan9 z+(rp~wpBfx(+^~HOoc8nm#%+GfgWAAL;H0hNzRA4go9SBYjmU-5@&7XD;O6maUxQ1 z1y5k=Jd5Q-_UM;Ljo7_h(Y@($qhK*^&1a$VI5;=y+P3a{w_*CvdhgOgiX`MbF;Q}& zj!46J8eGqYkR}Rcq(5MxYHJ`Wgl8t=L?6IcmsaP+ZDSSn`<{wTiO})DFrFU%P{yd` zx|Jsjkda(HtaO2~76*4QdxjZ^u;vZDD%uTxE=@}p515Y%8uG|wUbMTKVJs{1>)Tzi zPp_F99wB2Q#Xb1aE-?$+=}5iUX$KU^n+xJ3Kzp@4ZOPakIVnkx`2TbJy%}K!z9v+N z^=r6fJ^*a{uLtu;1&E9I9Y>j>nh2i|s7b7rN*pwAd+T3S zT9Ip_tTV;q|K3dc5S1S^&Yb1@29n^tUtQbnKZpQ!C2+q;v>rLSo`C6elA`~VR6-KC zxuX~51ke5Zfk;HCepjQWtpGWLIU0UyFeZa9K0^ig_Iqk=t!U6CIX9jKf}Sbhm4opV&76Fx=>*{4mMVbjA*%zaJb=uoKfgvm#k+`v09OK|vlFsg_}5B>R6A zAje{|xn?KmHm!;P3-CaK$0ErZ?T6w*48LzlOK~a^F;z%EZEd z{PE{-CknXYMmpK#Z=3jMG2J_~z#vU3mNVM@sqLQ@-`g=G>NP!ZMJGYglYgB5bI1e2 zP;q+V@nfd+0Lb)mqq$iaTJl%A_*04hRW{Cpz~5JSzg^@ctJ@L_x&RV;_VL-Y`foR( z7JmTz(SlCx`C)k+;q`AddW4LIaSJGCa`#&+Lpu!U-SR#`7qx#WvAY|1 zfq!+=sT2O|AcFv7F{NsZaQkOn|N4wDqN2q_4f))wx?(Qv6D3oHwp}1Rdr?|TW3xxm;_NC|E z_rB+UzWXM>ojsX7&yty0ve&E?`$j_v3!Mxd4h{}WMOj`O4h}vAMr)&?z<&LX!iHcB zaeFzrH!5;+G;iF1HujFzaB$420CV$~%IwU;78d5_!xL;Q=x*NHF)<0+=E0*qeKZI^ z6fqZKM+T6S;Nc~u88ErY2m{&&d(ggeorI0Im0bgrMxyQ2w99?eBpo*vBFd3-{|)B^kl(Vv1Miwge-ALH!0&yYf0Z=;)+rBnIc*;$tgXDk$tJDWGQ!s4DYqbO^>gGh``B!m{IgLBgF3TA#C*P_;tcdWF>R7 zVpg96hLdAv5>gUUUha@S@~=>5xK|Wrs`NkTLZ23S5F=m6Rz~HAZV#)Wpp2MDWPQa) zMBJ1^iK6^~9IFuPg328PVA0?c467ZG;^795KRrMDvml1Q;X&*_9DaU&e)ahLEQQK^ zGS~x_C5M}-GSw6)&)|cpbI#g8#YSBnjul3u!J)#xghPZ;@USl&JQ*DFUo;$?B|Q0m z==bo<|CT|3$?(9ze&O(7mm56qUo-)Xj)=C0L;5#13wHnWQHEWxRR48$s1rPTrmjn(DY0O^Nz{5cO zwI~4S#A#s#w6x~*adP>S4xG4;D2#Nn_OPJwadLEa7xj^#`%6L;M*m@R(b4=R;^81c zXQ2LuMh@s^O(V$3&B;wCiB3a9BkpEpBdRU0_-{Dup9Gzqhlh(O7nirUH>WorC(zB7 zi$_F6go~S(i+E6S!{O{s|F1;;CmnffcYvF{i-$eXndVQr7M4Iy4+%QD zKNM_zxP z{GTu@z<;uG@pNp%5}RZsj+$wlRWjzBjZ7Yl&3B#-!C zmH9jCe>L$h>AxJyK;9mfqB~4$lKkA<{|5c@$$v!}{x4FP_wT^JJ@_Y3&)wQh4(Rl! z4u5&Te+=`NE66zhgZrmqe{AV!|Hnl{9W9(~CFp!OtgLM;JRLpgB>&fi#ku|^_m5Qn z;{LzM{=20Ay(Ho=8;hy~t?X@lf&bY{+AVDHv9|nciuncHQnrC z7O?n}%^yekOaAY?f65#DZ?PnW{-;cTXZ{ml_}>73XZ{Uf1rT-jw0v(3_=oZTvb>J9 zE7#v_D$e!)m;RUO|JMBf)wld*dRXToi4N2H|8!K6=*woiws3ILa4PaLx<2q{>!>Z9 z3ckYNVq;Fq0iwj6Iw5xE-Y|q-nwN9kv~kQID+ZZq!kB3kWC;l5SY zek`Fi|73|9;cB%of&NHxV8^9>@Fj6@fn}rP@^=?suiQV!9om-jD$ zCjx^&$UGam&lpGZHITnTq_Bro9v&Y9+iKl&(Zv7vuYJhW{Kw`Qqs~Wwm*k(Sr5E(P zbEwjLylL*P(vW(*1}zu?347I1z?h>62pF&7)8nQB4*1&V;AccU7Y{k#H5?VfM`k0w z$jG9!CCGw97LFT;C)Ou6c9Chc8c73H)=!o%nEIcUCv7mo1)^BOv=N2S4V|wMEVsTJ z@x0Kiww-H7VSlS?5gA{> zis1K|$~HdK8|fAXDywb-m4n(&svR(YUJ%!RLh}yC68v@^blWb}ey~;9buWj}Yrdt( z;Q}djv2$^u_`o>$a;w+{!R(!#9t&9D`s)mqwDUqcK+7N(9@4Sd*e=$NDV78&QVziHTga6no=`Gq$%3ggwW=i zJbq3k7tc=@^FrOfCqQDGzcnC*)Q{g`GZ zNli$YJbdR0sq~!c28iZ$@_uE2LU97j3y9pu^E zzFq|_l!6vUDc!bC1(Jo2k|0GYHv-Lu!jl6}0rM~`1T%gn%OgMJY(JgdqOhBds!uu0 zt>FpU!O#D;0jc)Z>%JS{`c&6HRz29d5_-KqR0NK~|1Gkcz!&F6ae{wN@s;B-EJNyP zSIT)%W^x4dh8`zBo~x?`dR;2@`G->ep6jBCx06SJ@uyS!H z-tg;g@Y{9XCq!Di8=QQfomebBZOqetlG=vD*MiGd>F-afnybB*ETRW}v^TU+H_vnU zgb#Dw%L|hw+cKw*h$Y3&TL1&**gP3$LE*dRAsP~pIgtP6z3J|7g2;m>^01ExVNz0E zaTdj?d)`$ph_J>-p)e%ZyNra-7P4{MnXW|*Nh6&DNI=fb_YUWHSKg|b7h)YM2`7vSh+n)=zlq}Is0^0|yR6Q6;ji#7sLF+J7iKUSua4!*PSA^g=-mPBsM z--GhhA02$(99*Fxyd6P!hlw-;W;>!3X+4yP~0BfLZW=`z_Yl!+2|e5bboT9f}+@y7=RdRM*)dX!^FxS9B$H6|8tOxG?t4I)}7 z@KOIBRw_S~dj5@d^@0j0>im0$xO<6tQuL%!2PyIxb69xX+7VWU4#qRr?MPz5T4wT= z;+IgYq-?(J%3{q8=tA>bBd12aT`M;iw6oyH#bAL!8j>#K$5{z}JpSCko8^i8>^=vx z`xOw(Kb?0o+%f#o9GT)SV{r2ZgT(m#H%BEH5TD*QJ?3>&1aLqU+MXdVTAB&LHB3+5-`I! zea9>?1;r3$ns^y1)M&d!Wx}$0BvTT2;kTVSj_O<9{H6Lwj$q#1UDl9zNnqKw(-upY zM*B2|2Q8P~0E&xW5{sWY0uvb7e>bD$V-n)!trHI}K2*Lhu)Xk0=(n%)I00LT^Dqxy zKx;lJB$B;8F?(*~IoRzXot5f+7z%zE0@XZ2YuG0HfvKjeXjq}Pm;~1_XIE*w-SF4n zyc-ls(-Loi7BnDv&Plf4g(BhrE{E(++b_D*-!ok=JK+a8Fg?m`yWgc$w2E@@zo5s5 zQn~SS3R4B$ZL43~BxH2N^F5Hr-*H-nMoX)ibC-4XBC(P1g)WSlJ^cc$xlcLW<&x(& z(fPBGifa&Fr?CP~nY6AUj~Bt+1qzu$@RI!;@!X54On$xahX{FafR{>-jvbeS6ONRW z!gzk-6HmQF#s)7*O7r=ZhKev{AHdO4jxjup-|XBG`pkJVP$^ub>!)+^r6%B09cb$T8U^!2yya-*#HR2~gMG-%3eg}zPml(&=!ymF6D4y8NevdLrQRR3dk&%T9YQMyYEq%J2 zM{u!cBzB>MC=Vi0U%*;JJ>bVZlr+qd8xhs*G9_BvO4s9{5fC9Vlk2#P-_LsR^s1*-c>dY+d2hBP^JXb$67?zP6C&RF)5D>Z87`xF!$Tznbo!f& z(fId!dtFrihyxPuHP;~lJj2N>lq@78a#_JS5*2|WI=@{ag`J;oJ|V9`sUQPd*`6X7 zM5=6{^k3sF9hW(7Igv<_7k!`hfGsWr6kWQBS1A1GQfN2bNMUR))v&jTPzmrCcNW_@vC%#?KXo7M$ zvIUC4SZ7S0@`YRC5a1c(HBL=Ia3GlXrqyq7$Ud^})_$>y585X~tbHQX$43(Qb#?Be zw7kN&E3ybTG$47dy*Fy$O#ChW}}Z~Z_*sMd?=k=5N5hkTbqbZaFQq%q#pXEbcd+?9Si3I_vOS=o#M{xo)~=-du?dkcoCF5Es>=fI4bRD*I(2vs^(Dxa#+$7&=U)Q>v_x7xvleqBQMREmLKq_q|Dn@i( zG6FI_rK#do9U@_BBnXJA-g_X&;X<-^b|?B_!>=!($R&dyS#=QIX(S@%4Y}`PlQy2; z=((xNHZ?c|b-dr2U}JyfOJ~U5x5A`fWG5x>C$l^(3L2MDR~m|KxOK^EXZ9fGH2G^lc(`!W-W6c24YB}^u- zeOSF$4ZH=a(d8!A;pjV{pff-kC5uH3c)$*etZveH*~9>mbt6T_iN#^7OZmJnkttYVU>1+gWV4DzJeIql$eok$+0t3c8{>AP zIGX1$2vVc$scA&J(C@;L@=06fTyJw>{7s&BgmFPKS-^!ITt6XLktDnmGg#YrTt?ZI z!*bF6{FF$`Ny;1G(2w>QvY*#OdpOb!q(0#`CFp$>FtEZmh9p?00cBC}=FhCxkwSx5<6a1gWXMAvs-IADCb;e{Q-;MB zR+rHkkzTc569lOs7vtyb{CU;R>4g|1_x;rmP>ks7D?%j9V5E^c&VaUo+-ALaHVDqv{K|HRA!?VxSuDR7i7{$Vru3eW+hW0eMay^ zo-q(v)lM=HtH)8~2QyOiGRBnj=7|+NtOr?o#LX-V{7QRQ13z?E{EJ!tO#{h;Rt+hA zbih$T^jp~cM4wMguAQVStVv+e_^s3J9C?Mndn`~Cjvc=~`Hx6Ws6aeh=WqCY*~!lV zsfFOf<{d*EMU-_lhJCB;@DlB1STmD6`cRSnKBtWni*VQE8}(`OoS}CDc=&O~x{V%9 z4Px;cvyC(+E&R~b$a`4G1P!`*Xos1XDt26yo+jLjn7>TKGL-xHrdd z$Wv`yZBJ42Z$AZpN#BazKAH_Ac!+A~)jwwXeNVx$KBmwzD1D3M5{Q5p5DPgZlOrdJ z&;iIexCzF}3Xz!EcNo*Ud&E5QY&ge`_}_nmEabw!UBqT;c+s}zyeV;UBXuqG&Yi0D z%XF5L>}3=BqvqG5s@<4ro@xHJh7fDGo2$cFkvDH}=q(Y*-sncpTD~>wI}+*uvI;6F zIfBueuAF%^P{L|&IKF;0rnQ6OTZ?HD0vei9*<27&P1^Wn)J~{H)*3CudzeXOQF>|SaG}JuHz}=)Y?!4`G(%R^F$UL9gHC`R z?ojh-Pm`>W_{2Zv4GEi^-b+z#7J$aL-mfXG%82UQ(0_P5(~VF+Arw{{p}?a0W3 z+pz*vwHW;-6$n0d*s0lQw?uReV_1{Q-cL6L&f$<@&=lEsJYxp;Bz+(U84gJZn!cm- zJ_45GW8XV@UidHY9XOPOP^I3@71gddedI7&5neZVUt|I#J3OKz%=!u6!LI|95-09Q zP86p1P`OkH#v}?SIMFd%AOYOU=9_1E`ZE^1vMo?QSI#TCTuLx7Cs_gM!-+L~iG*t{ z8XFAbtb=p5%Ws8(w=p-KpKgVGNP{bWMdP#mQL=AJDvOQ2+l25tRXv&DqxZT zl=%=p>jX)Bscs7dNwK=wdp`f^Y}_q^z-OsGD%(g*|XW##wa091{NK5ENov z8i|F{>PN5|=3n{6-X4|clPb?gOj-(NM;7xC)W|bY{*NizcAUn_JCfq8 zW|NzIrX$8gT#rv=Xo$+^kJ7iz00UmRd#)9_mo0zn36mQmb^HD;ko5xr_}ri0Ysz!q z<_JtAZGbwO$hE+9mnU>m4@e0dOO!wfJ`!-V`57Hu_IW6dr*BuF#&@CvQ@Zjg#R1=& zMzk4`?QkEh&c1?q*th%*x~zd8YdY@e@eSmLPTha8_l%6cC4|Wnfb#X(Ae4M?Z;*5a zPZUo};(x-}ydCG&cu}sC^jjS= zjXL+c!jEw_L^D_dK+*_06;gz?$36Yc2;Z(*R|7Gw|CL_%hS{>x-1G zc29`KjdP|ICqpFBLTdhHg6*p_Lt?MZP0GuQRd$mpX;raW?v$9rilVS?AtihR~&^LBbV_ndUH-+JzNQ#0=__6@_VSfJ8uIqC`V4{$Tf%s4S~`A+_7!bjhA>FvztVL>_X2!(QF#H3QnXLdh#Bb?=t93#t;Td8w!<2Po6uH)zpDVy!FI(q9D3tb9E zCiS&J)1n=-1) zYnE_KZwzNl>m){(0vZvfLWx7An0814budgV{60(lRBwL_EREZ=JvP|eIM#_bHxblb zW3$(esCmP8tt)|YXI(z#G2XV3H}K%ce#kjFYmGlS6g9n#bEpvN0Ij^cd=GpH2zJU3 z_F4W4DlvLnVaw7i$E!h(W69UO>Y#qeP9hkpFiO&&{Lsra#C0~JG(s9Gq%WoxaQZPs zlX|_e=|g`hh8TpL%EIgO*U%=JJg5zO+vAI^VXaBK^xIic9pdwp&Fl1y-$%NW3$tA9 zqMZfw#F#k8?IuE$iMPDvb;gQkUyb)0IQ19`4e&b_zKj*4bqQ?5dPcidrsB8iM`hbx95aJ$|8*cz%n z{+TfJnmyXvCBU&4*B2pwe=S{ST~;i1P$PfnI0FnzPCSf z?7A%!MP8Vp+QrM-(?*Bywx^h22LLbwQ}wZ{8$z5Z_5^GnMii8P{z&M)57bt%s>~S0 zzROIyW?Rb76>nn#@HBkkcsxnBC>m{ z0Qu$w{>Vhauz?hF^VhHl@;F^jf{qFcT0vE;2mqB6zP>6&CYDFve^MQ)dMS38p?XVB z1Chdxa36jluqLk|sQ|(VVi}5TN`QlwY!y^6skdKCD`8Jna_T3DO!Er`J-WlW?TZ|u zB^wl#CpHz6mNbkRe`Y1szP48%VG_HAt+6OBw7Kc(m+8D2tDxWT@NB$F^88}1x?Pv& zAwIoU7~j0{P9OAIrl)yw-$b6Me8%Nn+-gZ=(1@D7OWj%O*1IL+>dJ`6E_RSv7SS_=_vBaUZ$GjIjYu4WEc1i zW~Bye;=rhPe%#i!^OyS?`9YJ&2!&hI&U{*^u%(4VloFnhVoC#ZEyWW;2HHJ~{XBPj zQm`;83)Y~xqL1wBFK1m}P>YgDQcvqwTXK_bp~$`mA=i8_ zP`{eNJF0ReDC8G952L|rvbG?aZ5}xoi-^xr7Ej}o5_qwf^4V>#3JiYQfiORMuQtec z`#UTF(Qsm&UzjHKM8sV&JE=t!+tuijh*7P!*J#VCv-F*_wP;~3CUEGv0j387RSieQ zDjdd39^F2|*4Hx0WlmXnjM1=ZJrf>ViP`MTqo)Fx?hW18mOfCsLnOlQBIAWJ45KRA6Uc1kJ;{Bi+>q@0GSTa5dp(pV*R-DV`zR@s76TxYPu4t~$+~b@wm9z@80n`dL*%zIVAQ|5B1yo1m15xu5Sv|3y2Z8 z3-i6nW3dDB+ZSp~_MA9vh83)weYaXRL9AvZv2h}k1ZKgZZNNhuczb;_sNUcpqH z>CL;8Ih*POu62&CC|I<=&5u~BUh=beb4eLDNmh7t4!#JU#W%)U$)}_ zPFJwll&RG6Gw6M({$^F%fhe`Kk<);a_}~eBviSGkLGhPOL)~9@A~cXF?LN;+ba+3j z1O0w>WN>#3BOz7>Cgt0y1b3EDjO)_c-YIBUMpD)yj@8SEh{QK0nuKHc^7bp9=+0ai zb7+dJ0i5QQ=*4Q?7?y-Y`D0xpyTA%CHEcYHq(g5bg4Blii`6*9Zg~>> zaQloc&|Vjk_AgPRC~uy2-fj#GutqKW!6)Yfh}MJ!v0qttuw)v_`a9WZqvHsn{H}Qd z)sWH8qH=~RQ1eUNZH4D7;>L&@kFh8x-GE^;Uc#106DQDd#p6&5H~Oy!ZOV-DqJ*0- z{p}LY+{hHO6s?ybPJ{12^g@ic%pZ{z9O!tItQg(yF3EK_TZ<%PZQ%~RwMxHJbsksE z2i3GTwH0p=8ckv7mjlMFmQ4fQq^iPdGUroW%f58aW$-KCYrfB{3k8e{+s7|nhwBg! zOlKPuWVU8^30@n&YrcLtN%F8Hz-xscSGQ*s`H++*h`3qL167`3-ij0yVWI$GiGb26 z_O+pQ?{`te>fcy@<-^s&-7gZZlSO+`rf*w8o*)^8Z$21d!FvxDvpz+1d<~I6ACDuA zd@~jJ^OtS|2A5|5Vu8t4G)t>?8}*7ds}U$+LjQ$Ms^K^4q)-&e@RMEjyrLUX8%0T> zgK0?$#6$%ik#NcgTy^F`0JGP^aQ*J)kkr$qVzyh{*Q!R&6V=c~cp?hsa7sRw$ho|Z z@p(LenJDVrI=z8S6P*k1ATH8MxzUNO=R9!n8@A7o;{3DJQ~CQ&Kkv8BY!~QvkdK@C z9b0XnlTG6a=(zqu*@BaVfe-nbz$Z#R$#I5#zTQnO|#7~=ib(b z<@`rONR&`V!HX5`UAXqC1?OKqp<6H3Nt#K-9;5VC8Annm&1~M7__9MZP47>8c!R(* zPTB)L0X^jzsXRBtokt22=M}U~78K%42h!Z~bE#}GZ0~>HcR%013gwBjZ2lmIl0Kb1 z@^GC0Wd9ZpqT(VS22EngzK>Ww^pw*r{w%2)Rl!w=meKWm1AK1EE)IOU$_HjBNd=;p zI(pe=ex&5RKW_&@8cHRqdYdEY@1Vz5DTHnQNwfi2b%{B3yx323YAo;VOAdboa=A&13y4sad>9~Y~4^J;?KT_NW{xRrGh;;Wq`wU_9J?@CD$R!3R|iB z<%tCsaZM4Nz}@0YRi=Hgt7cL4(<=%zN;Ke;`bhC*%(PM}(_NHjNrn@`W)vRZfu!hi zwEkZDxk3KR>EbYV&q||nSSbCcN8b|5&7RAj@HT6Ox>r9%J_GN`D>6?#Og#G&DRHzH2kZZY&Uujb zoV1ZS`UhjWI!I@Qd>j2|#+Sz@*t6J+JK~ap-h2$e7zn+^4eAp&zs5Tc44ozjSmcL2|Hrp_R~xsi@#gnoC=o z@R`nMBg73BT?hhY(mfUID$gsqA4}Uekt8#RA&;aX$^_%YmT04tJ*h3uY+7=YekYpO zyJ-X|T&o4Od^6NF+u-W=G0KFvE$4W3H~F2?JC|V{jT(^fwNbeKz?(>LP6NmeY0He! z0M-HC4<-gK3QWM-kE$cv&bc-SB3VaVs>B?JAkRzXM@GP&3hs%x-j*N;egehmu4;8dQJye`ahYR~=k>S$TEz~@tmSKaX$A@>Br+x(-Oo45Uw zVbfz1)Ub%z1W}K9j7|z#n;s} z)N$A(0-lEWpq!Dv)XlMH#ZO5ipqzk3mQ-0*vi6zuxmUCGyamKB1{gcHQ?E@MZiAtn zW#zEuY7e9c^ja91;LBU@ZuKLg!Fr9;_N)8lFGwm^}o{+`(>qQ^qqWNvZvYi2c6%fjJ>{}UJ$VtNC^79Y+=GJ@RO_0mvr{@ z$Vkqr{jQmIM)m~!!M(5PTK+UvNY5W2g}?KnrHv8HSY0kF!ydThRyi=Kic`8kL;&7A z6*M1WuY2z-5d*eb?5n)nj#A&SZ1bXA({>5*7g-!Z+KOcYv?pW>yl#C@9Jp#pv2U?S*4Loq<#ndBBYO5m8&21Po6g3G?O69sd2G%bX2k z3A<|3Bj$MHdhpX6)28uRD{TJkbg}NTQOzEB$2o$ZfA_;ipDJAJeXl|> zSu?OHe8{ISHK!QE%I(6j-z*ztb>#5<&`*IM;F+##ZtBmoc|n6?qFn&@X7e7BFZrsxiE>U|yrxV6H6sX@y}?&j{!WxMuO>t~6WL zpxD)~OWxG)S*%55W7viNXjp)HOEPnwzZ@b&z4X;6O^AQz0f0RwkSdycWLEx7=shb7 z3O==34R>gBLv}Z3K7f05F(I-e4Kmjb~i~nm*M^jx?9)g4-xI1hq z+)Y2a#D|MShzyApC2=qkMGSq>X}`^oX`E(-xt+2KcpWA0khQg(tj5*JFT%FdAzsH4 zNXX|?{UJfW(!|_Kb*V3KsHqRd_PzQKcSNG8%G4Groh3mEe)Ucwc_Ws>H3tg>PNcd- zouhsOFoubOJSJC=By=X(*~TT88+leTfxh94s@FEc?V5+G9%r!nM>yvLZTDqz{f0wL zXSp1XL<6ZmIT!Hc@nP9P|KfScZ$7W4k~-}yo#7ken&*O{DP`A%07M5AU%qLo15^h} z6elI!;e{ddQ(7l%#k_G(<#}h+kclq;(?F`a%ogP}v2aL6N13f6HJgR8O}i6W(+Ns| zFvsC8(PP%gS2=XsKoY=GidNbbiN>BlG}qlW{2ECjfE%!wpmd+EAzJnVs!h%beu*VP zeDILO3J}A6UGJmkhf1W-7-Vs)HaxGDTMy!Rzy0DYYdTa@*eyy_QM}eMklwhA<;#iK zX|3F@dE0AZy&>@N%?Er%giL(V+O-RGNhtR;E#dXY=8obr{k~{R@1X*mIF5lBqE?nJ z|1M%Gf1sWV#jk}YVUJ+DZ<-!Q{q%sX;ZwWgB=YKlFBp-B8PFcAGewcG3tG(@?&dcg z-)H@Nt@S9~cTncj1uM*Af3=9tp5UL(ds0D$jmi1+(gufQI4&{TLEAt<`%?0C&113X1AnQ7@Xwp6)?L=*F<1yX!p97XLT}Nkm9>$i zL&9k2{f5V0t{EV~ONP@otHMFiD8(nGo*xujSE9Zo=5)QD*U9()F|I}b%IQq)7Mi+- zz;s}=sq#WVwD%_`MyhM|QM#p=SG?=+_TYJB+Yzg^JbV!iLUP}u3T5KF9~QJ|u!>6@ z6Mm=&I@v2z*xK6qzWedU!Di%Wri6I+IT1LIv1RtI{oSuVXk>igLKm_Ad^4x1?&I~Z z-)3A9@t5iTnq~KcV=0HITZ6;Xov;x@&g%8En>bd$h)4=e^4E=Os=ny$*Tq_hXUE-< zHoaf2TroO|rI7922xnTaghKT1JVg zIpg+N1ikR5#HLW56gkN^{(-5t8KhViow-qU1KYJDMYhag>fj5D-pwo45C|_?EOQ7{ zXxvTv&0m3pAbG(v?;r_`NqAkpL(7JqteFYd9GFet+BL1lT|VB$afKzkG&_1fj_Uv{ zjLNninMTKqN@$eFw-@g(pN6N|OG? zBFCx8{wa5J#@Z28c1t)Vcba=HK}JX_W{Hj-Pdf>WruWVRDX5X?*mt z@nmqa9mR-JI3|vyD1)1Xi+=ggf^~*a^w3-@B?IyJ%9*ZKq@IEruuJWS)hRx`g#D_G zdyXehrK_)KRq0eHFNGA(t(m=ovd=`&z*J%f9%8y-yk$Hk8uXAZP|k3_)+oAXLaw)H z+70cP(+g3TbbJZMoSsg8=3bg@DE8Lah7H3ak6}2Uj50^(b%xkkJ_gZAeMc(Rec5q1 z$lVa?wT;GvjkKmq>kvlIva)t(d6rlK?D?sb2?%UaJa=3b_?WSd?q_k+3y(voR(|1H z&9w71h=xbqW31(n#O_N(ROUHsBjCAdwK-k*S}9GJU6PQdI^ul~X=&1>TX{mzC=EUe zo)(Lf#px`8dGVl}49RL%?*K9OJUizQ{q3I1wm_97```@InJgp8V&vPGcZOV`SqsB6 z{&U~k;`u@Es$+cmnTtiBl6HQYE026s93GZ9C zfu$^w(yzYYA_diY;{ZI1OhLh()zjW_($6c%lBXewWGski`M71?$E#8Ew-g(DZF|z! z49qEclx;TB%{^1wC#KWg#^xDh#7~CN9Gyay1N5AS@@YB?5~74!GQROvrA;;<4N$Gj5}Vpq&Bv) z|Da#B;EITX{jCV7b&f_Z-K}!#Yrar?pEoTba`!m8rO|BWg2wLCZENE@;JP2{tS1cw zI?PpL&?)+`POh7Ocj_mwdE(UZ;xH7)=RExN!sd7nM5LjI&YUfBtu=hX?qhKtd+an3L1jQfOX^OTLP!nl#@jL_mD*|pOA zSc+$ok7nAhbhHeKZ(6!pg2}1x_|l5)CbRl(%XDP1KJwhg)=n>GwGYN@xk`%^xKF+Q z#!pU``8H$P@mmoX6#Hq$juyi&eSfJfjC2@LuNbwb=hv!CLk)~Z4Qhu#_W-=}^(cTTkFbtdGca7afXKG05%BX45#PNTlb`A^3&+FH`m7@M0 z1PM*9F;m*B&^sCI-dK@8*|Qr-W0*jU-wQOR52RmrytiAW#2=WTa&WE+1n^ zZ%P~zyY9f&w|?$r(HtGt+m8G4sU}4+)o~j)@Cv}Qnv;G6T)Kj1h2#B!BIbr7m3jEi zl7U%p;FL8+kPehqAfwsxrq8}KVSJpVo+LkUiUf&*M~;yE`BhDU&_mk^`uOBZe5O85 zp!w(9%&vFFz~fHyDo{$HU}cx#MJ?~iHx;285)8kcL?L{CyAK`7Y5*VfG_Zhz((n<6 z+5CtIE~M|1$z-TOL{euCrXD9N~a z)`E77!3=R9&$whV*;OCXrkC=?o+=AG!%G$)GabjyFY7{~b>AXeS++xovj$1f3+U%u zUQdK27(N#(SneLxb7!x7jp3qr!~Yc>OMVpXa{}tRHnI~EdB(tR+03P|vg`SE zA=7sfEgBZ{j#V4?+mH%?#=Guiiw~bXQ#^Me>tvfVxbT{)zc1sf(Xibbegr!ZwTd3a zPtIy?mBd}TP+3)RT!2oLYORUVKx*WERwZjr`5-=T6RD$Evogs>A;Fu{j6pSswarJi z!CBkSWf+JPR;(K0mp`JY%6Mw&SDo9PAPKhOfYYAB`2JTx$@|js%XI;+Z z(sK+3bycBG!kCSv&N_Y3@P9T2lhJCBIzRgFWWJ0+(5bz~*px({iftM~E-4Er>k(q$ zFR0@2&qIF5(D9hs`DAG9Eslv$n)7M-Sc&|)uh5>%5ui}<(rL^5CKX*6!KuU*lXqc1 z9{IZUo}((rb00KM1?*CT3xC`kG+ zTVX%$cG<|0Z{p*jIlZ6wgN5`birL<8K>X8DWX)X;dQ(p=2CHDWE6{GHG{eh2baiRM zZ%e@App+vgoehK*w46Z;4PT&sJW|TZHXAjaQ5WaG=a!2_o)lRl+SwS!j=+r%Q=O^u zBgu+$4uhvR5J9nlPR7%aa%(ZwJz6s>>nU}3?dCK$U^Qb<-Ln{0 zJg}#$n)Lm%9#{3U)<+#x;ZJ&6r&(bUb4Zdu&_!dus75g^cnu3Q;PI%r?_m-KIC8#W z8a$y5#4f{-Ldli^jk3-@?!*a{6L)y+f_|CpH6Oak8UZ^!>m?SAv_-HN84bZ5Qx*0r zsjm7-k2V`b|Og@7&mOzJXaa zvM)2om;MpV(uSPx>o{%xmidSyGohzw(j8E#l2xZH@44T@*hl~p4=trh;mc|wdG|rM zdXicKiXU32e0YR2t9=o)bj&}O3FNLdQ`i+DdUk<$55}ST?JhK}WgTrRF?kx2zxNJ) zHrWwCW%T!9G2^O@hXWy@YxP7GiCRI}F4==4?{*})p96J9(fH|#n8FPgnji|`2u9@8 zcHssyM%wO9?77VxPk4jkMA}%*H@)H{5fI6%cg!t@>2@KRY35yXIp*MvqrjLl=c+|`EHVe1OB77W>a=;b| zKsY1)#F;RcrPP|#yvKk9$3x;0Iz(BAh>?iIOn2EcCYY3~T)8Cy7;mA1oj6ELn0XQW zlNr2sv_;m>cOAR2u%mt9$49;wL1GSXP)!owsB~gwLK>R9?7{M(2xqee{C!f=j}WZ2 zXi!Ob_e17OMV%T~L7?hksasA{anGd?Fk~1 zU1sDOBmnHt%e*=2N^^HAWeohwHxU{i%yah+KbOY&mo(G9kLP(Ul{Ml}LB55@S=KN& zlyUuH(F@8NsdOtkXrIGo@ex7F^M$Ts0S^k|InrLGs2;;&*&91m1dU1GZx~X2Jo*=K zFXHyw5b{$P$1c$(=_ms|6Z@S~7_ZEvzUl@R4HhS5F5zo1P^T`bc8Ld^W4$@#0m%MaDHba9~a`MS5T;G ztjHQ`)g`BBoTRFj!OGZ3v_j*w=_;3m{+T-CwW7}@|Ez$=Z$ z;2-ZSRo847pM`+UKOu7{l!+K`(VS_c3zvj4`K8%@PfIJD<`O3*N-d2>VEN`{vP%Zi z{1syc+bi$1Qy|sAnaD7wPDx6;sj9NSy&Ya7_+EJG1I2~T+4Q@frH?OMw)9kUwqGn$ zS<9jL!bvgVfR^aiZrP$w$+C#e0$jPe62_z+j;^R02+r<}r`*Ni;Vny`Uz4)xa3*kj z+T^N}+DI(Q4dd2c==hV{;l83abLG+_;nD$XHT^m+)LjY07d8`dJakYyTVK@7??PZ7 zR24P9nh;7BwdF5e0u^ud<>2?xi)X!^=|=mOaUd;r%!b{d{?mS&aH~%fkGe(2y+#jrr1m!S|~wGP8=%(MgiS!1%V}m^576h7g=3g4NeULgFO? zPMC3LfvPOqA>E&;L3b?jQt!|2$eFV7>A+)}M;!s7I$Q)@+a zoRKHTIFh?I6$4uvsGhtYbjFalpDo3?i)hFSDlwc^2RW}CZ>3V8G3wvVM=gaqxapun|P-aFpE0Ga~8uQNF>ao zSca_AAfs8vT90kSc4_%dd;oS{3(M>{cZ=ijD5}SCQGgNL+f+@j&()$l;kC7EYHzcA z4j2{*7>*!yYv0P0RJ(y~wYwr^U6uL&0>lM7`X0zcPF~%UBFfci<83^pv|GFWIOpsh z-bvr-cUmQGbql>gNaUYmjC&%NzWG7ID1DI|EWwsG<3KP?l;9;~IR+x6{O!TSd8WP=zjkhKo{lup5moSbGm8{;NATKllx*Tr)bu*N_? zjM12+4!7Ta`|6~VPO1($ZUr4V)E#et2N(I| zNxi8x!0mH{le7??g$)d7jQ{9;;DHA=YfbJ?n@%}=@hQkZdi60}F?hyHuB2Yj+YH@W znv|7@TA*UAr2-#m9zoqW_@w$FxA3!*sy$XbV1MA4lP3%BqsSB5TzcuHjlmC_T)H^I zExa3ytdt6v91_Q5EPdLPVCL?lO|YlAdgI<3>_Bvg02UFqt>4jtFtMTzV-mgEi|<1) z-qm&Cg%>u9prS|uB`OI89QDoII7sx{bkj|nHI*O?eGC}9z+m`tMZNG^@m#%e?-Ayw zKmF;=`bLUYaG~(io^r>=qHoSU7$Y=hTs;uD+itrxwB$_g=n`l|<^!%nang=Xn2}p^ zBxmT(P=ZhH`#2B%s;|8VUQ>2pD1Pnw#%TsH0008jNkluu0@RQ{!K?p`;3Tm1Dk&9Y+paO|D(#L4FI_q_c;X@Xk3I8;WALHR~5~VH7 z1c;Lm33i1kD7HRhiqjXDp|tD^chq`>+25*G7{IUt%Q;2aXPiR1yQ<(!kd$y-Rq(nq;=yTHKsQ4=>Zqfd*RP|) zs^~oKjQp96dDW)C%z>=h{Fz}lWeSL(t-E-spatY1DTyhgHUmGSz$#CHnFCqnSu{g% zniP-%wOh_iWH#%VCZ%Vv|1VNt=0N^0a&0x@i!|o3d|@li~=hhh{araV1JZJ zL^dlk3d|@lqri*;cU}tEg_YYmw!(qbQ~9gD`qi&)Yv2Yb83kq(_(P#UbfKeu#m3KP&nWz% zuyBUwi~=(X%qVcjP+-NYOgi1)xBh)${df1y_1VuE1!feOQD8=aJ2wUXwI2RfcWx5Q zMn9v#i~=(X%qTFUz>ESj3d|@lqri*;3r~Un1wz#!<-9kP{4iWZDo}p$^8aKY zD43rRf|{ev(h*P=LSKRl!fmc1ziCsEk)0LNG%IL^alZV*x74aPRz_av^rf&mEvf z=rODG>rKZIQ|)E4Uq2N7AOgF7v$>{ zgevo!|F9^5A8-yZoOMiL^V}N4-rTjZ4X9u&2g<^u3=rQh7rq*qyws!r8G?47@8J6= zPK5gLz8iaWF!@t%heA+uuWF@ru$sUVUyt%EE+B?5MkI&)SXMtR6!8%HiojvRRv-)i zOTbsj6g-^LNh5=huCK`5D?Z;)KHB^u_~PZ{&5MzgQ?)>znow}z|K+>H0(I=mXJz(v z<&8scPCEbGO-~|pD}|>7;YxZoL_N43C84Zol^_;;hq!GLp+Ym^kMIkXzF*{=vj{z? zg3zEg&vZz5lwxQQB@`CoKlZ=B?EL~Kl%n!+Rhe8eTxJ%Uqj&2=50Y&sEqqT&3?Inb z%% z@6XM|bls{LzqNdg$H6KOh1Q140^;}q-bZ#vL6Q1s;F}&=90jb!FzI^1=io!bctwjd zH4vKX2qTn>Wqf)9MgjT*W}%RV;doJ|J+US!%fI2f>eLzQ2!Wj7tbsug_h-#+IXc3pELomTyIq~W=R4h*39q*ge8;Sa@TOUc*!LMC0XrEa3^AYhL-7Mpj;)C}0k_@R z8!Rv%SW|vJBJ7-xq@Bf#e{&LS__l|?oQ6*s^@41Gu;=xpTcq~gT^oM+y^YIeX9Lgo zz~KgN3&<2Jq`g3YX#TM@nIWa#(gL_G=#zGXvz7A9Dx&5{*$a9b+VPkZUln%DPdpzCasI>1syYVS9l-O6qiA|0K+3eu8~99bO#&4&XW zC)ihUUy-Fje^8#g@szjaWyKODQYGStjJ7p0b;L6_*DJ}y^TdVNy7=G2bK^oHgeUBB z`fTiM?!b9%s%Aeux+K$|A@E(Px9{(~eDHd$e0g~hShI`j1I!;HM!a@fvU89E77qX^ z9R1M}Au;S4)&w1%uu@Kw2;LMGkPh^Ctm{xuyvQ(6QTQK-eeLK$N~$oojp&l^r#e5& zzzufFRlt=%;dB^Q;2uFd@)CVT_~ym5PS}7@=G$y_Yv&W60p0S>9mXdT8Jk}O0fngt z+gflLnH1H_k8nbi@K^YELbjk!QAATwjiPK-pH)N5_)Vi)`}zJr+JH<%EQpYzX#XHy z!1l^e7KJ2beAyF?`B^ni&Wwc{xRVh*u4e~o`cx|TV?5RPoeM;3kd_F?c)T&)dwP3G zJf^-BdeYy&H!BdRaiaB@Dj7>4iaQS~4evO#d)X^2j)=bX?0_9Lb}uWj@XT~ z4Msb}vJdA>{!a0UVAa=?WE|!6|#a&QX zoLJac=wE11@N-6dnsVBq09Ua&>qfFPqC}{U^zqkLzuSev1?mNc4bwepWAw7fMBcpI z6U9J`#^7ghlH4?#B%6o}B~8s0{uL1}KFu6%^;S9ehzGXozyrKOb_Hn4WcE19eA+yV zY*7AcUR&;j@s}EWwfCiwbqPum9Ad7#j~RS(RrVzV`~-%Y~j zsAo&Ym&={Ss?|eE46=J?H%&*Tize9%?B$DJ*@c6%myc)YUQ^Tak}3}um|H`}Oq&{Ym-W&LD<{2ia3oN3MzP!dfDyfJhhs22yh+#oPs*&)-R-HWtl~6Zfk}dS?zU6t&E)9#e zftHb$v94Ld-mD(I`d)X5V3H}uC7WD>5QB)=M8(h9z8e%j6mFs(B2(dIyDav~l;D(u6cGC%hX_afS623RY!enn{XbPvMj{^e=XL{* z3!64`ihV4TwLP^9*I~)NIAf)Q$4ML`T*K~huF;P_kVKHY`&=T_)9l7Rjoqiwq-nRb zwB~4CYiX`3ttPI{tgvUHy(eFi z^^sK<=DMjr+kLRSIEB%H{QlkyVGo8G>CgLFNN%_)giUC3M3>)HM%z^mRa#KZkP^N~ zknKi~RYnyNfjR^m1O^1=ne3SqnLh;Z{8at6{bu~H{agd2;dwxOK|#SP7}nAHT^rV> zY+O;RQA~u=LbBPvvSx+3f*pe5gjxGC7@`=c^iF!!`hxXwws=32SqLpZJ1yObod==@ z!Jfk^!b+oQqUDpNNoA2qi7rN6(XxGY7Q0wMZ$@_(mnbqkn4eypzBM5*8Jc1jj`+-_ zf7NT3Z71s@|DJ+~MgNEJX~H-|@o&5E>(A=!H^09wSs# zoMLqR?y>XR`bR^nYD&pL2?&&2pLF{RuSa{}6!i{14nED`(THx$BW)|anlNAD6L|@; zL&$tqZPr{PN+XWV+HUW*`Ox8*^w64ShEk-el}riIC|Y`wF}w9(kHgRG9EC}S0msQA zF|JASeI+bH9I_vj)BbeVr8XS*(iee3Kp{mTJktDct2{!k!A|0b3W0_2`P@_=s9p@P zxx-jX4Vvz+*rxDCbw=iy(Gn9`stw|{OPs6OjRMD3xdR!=EJrO#Xi0`7UXqf()H|mQ zv@BeLUeRCVH4B9cYp!jV6`9dH%d4Q-R}yu2w{3SJU3qK zzVt4HEX6s|sJ6#6D70MtuIeyYivK}Jr}g3_G#nfd8yags^{U3AJ97^g5sX+&QM_Hu zL77dJJgZWw+O%`2wy}7q*s0iD99E2})UMs9?P%aW{_ucEiZjUSwn)C{^h5qGF916^ zDR`u3L?}7kLTtt626Kn5Rz0jP&hoiRs-;xlb@N8PcD1&aBh-<)P~h;7y(UNBNlOdW zcV+oj`RBZqhvuPMFRlwNx*Nlj)=D~4?IDkymj~@q&r)t)9+_D$W=Zos6Z9_*%(<+! zc%hv0lSgxI>yek4=7A$f%D598Re#90_gb=_`+_5`LGhnYxua}1t%v;Ln#n}cTO24i z6qfc2rglgDQrVp2>~H4TUTp)%9@BW7yqz=8v*vmOl*VS?wL8B!WQ-J-Zv48<%^Tv5 zPhJwK#cM@%+U}W&EH)~$F4JrQxwbwF4~D6;_N^W@^tN9=IlLUtIR>9xt)#j~Sd|~O z%{~W1|3)(PsDE{L3{>um3M4>M$0OltdQ7;z+eTZ69!tGUn@m&UWO7w{Tt2?vD61$N zqWj&l=SJbYFsJztc!M`nex&vMU^Jdy%9ZWPt}UT`+pc;wdv;vc&iP`xA9m_~R<^FW z_E?1!fLG`F-GlRy;&`gMZ6IANovMA_)8qyF`dZ7A&$Hc+YWqVAoQ_q-!UCXW;XQx` z7r=hBM6Msxy6%NP_+k(6e)Wre-t=+;${?++p*3wRjYt7*%)E~=|IGQdnsOp~eaG`^ zYDPkg?XOx{iP2D)&qoGb-M0I4;g~=HwBv4WZ)dJ4Z^`@!;)8uz`x0p_CMW68sDUfCOR#pukT+ z@Wl{`CUu}qt zjCcQgen$u{1MtZUh>3yk^7=Lg1{Su)mUbAVnPK1;uvVg~wg3PI$=d}KlOsL@_djc* zpkk*YCCRRDX-=#A-BQnh*2&!JtselV6Fd0P+`vv3-^tv}!j|2Mi}0@+?BM6O*K~yV ze^s&j!9}PdC4(u(7ex(KFI9GSYx+(AYX#*y%daSlAN%r<4EnBWPf&Z)0L*XJToA|JJXr zo~6AV7a`%>Kz|?qq0_+0+1~=t=d&@3k;$&c^DrjO3 zmKk^q?yvNWoPX8-zm@zm;=fv|{L}Ia>;I|cze@hEEfsAIYy>RL!9&_{|D&$|4*T!I z|2E{Ld*l3HlK799|9T6SGdCP3-QPOnh6`i!HUX>gvx%Uz0{9L#vbO`gGXVg||8swP z9$@;mXm1Yy@B+jH`4pUhN2$;$(}ItEc;Or_r>(bIF&{7>1!d4(`Ltc#k6T-Av?>T3 zUT?}&fG9!=yiHfDuDg5JFPF&%{ImnB=2foXqy63ue}H(ZEqdwcVt63ux{@SJ=ik)c z|Ek_0>;*CX-naSRL$gVPx!=XAhWr<|KpY^P3=YD{uYd9JhZ9V9iqSBtDE;-o7{F0XL-9P8@#wv(?4Z#e4u^RH~DL^jwzaNznHoumAh@4OLmx9TkDDEB$w z#3l%#bL|RS<#Nt4d8M=~8d@Y%Wu-pgeTyg~H&U(ZBWttu%g z(U2E+IH4vEoPL&V7$=}mv`JT>ZkI1oULhcnIEpZcvL2&aIEim~_uZQ~G6SqNv>JVt z(iUl*tsOl^Jv)J70>ne}xNm(WRpHM^!H%6Yp0nx|b)hHduP@ zH2OlxGv-)r_{x#fxJo490kK0a#?LgHr@oIg{W8^6MxjV?5G^W%`m#NE66-^ecwt+~ywME-SLWP9jX34YmO56TuhVXK`hnBoMB z+J=AWT+g3dwR8u`a#c;Cx+LSGAZtFa@THS0&Ra= zS-k%Nv3CZdO$JA{T~7!pK|({lT_X~xMbBzULwcyd#^F%ZuKH0q?+R3?Av+R5TPwZB zQRefB58^%r0Ancgx7;ue3_Dj=dEo&`ws(`?_`rgR34DVHQUEB*SMFCnl$*S*E9vpc7YC5 zxqK@$vlKAXcp_hB`;f(U(-`DmK5MJPlN=J(`qr#)(8VU1rsXh|EXnZSz7zb>FwRRu zd3aP=Kn;Sh8*EoJ2v4dHk*UxLa4Afr>J9P7R2==%!2zKaNiRJO>L^y#H^{YY)M~#= zuzid@dva5Ow=EcYbaeR0H8-PjJ0iB6j(A`Z*Zx{qnk}dJ{63AHqXZ_ky`V)h1zSxg z5XxMWy(H-2h0}^&Xj@e?j+V|Sj62~$H>9mEWuXk03EmMbMNF;W-_m6i&9R?u;Q~yW z0YrFO_YC2Xzx=_HtGXgyilT?qVR<}w+?n+~&Dp{jvhI)*o~N|H}7#*9#*^k zK{+oc2%W-)7v8(ob*co4>>Kcab>)Q132*y-Vd0TnT!*MY zzP^%pw~IQlu`{_*E9$w9(SfpHV>P9^VMG;qH>2vb-g3bU>HfS&ZCR4M7yooZyf?r9 zheKxQ7y|?Xn(K;`$sc@qm=H1dhj@r3FO)$ZW2 z2aOYoJbMB2R~k*(->88>0ozP8*O7V(a*ft-ntNCC>*yIIv2*X3pa2+`KEYdQT!rim zCu7kr)KQimriQ)#&AU+@+^HEN@dhs8c9D-v3bqp#W5R_mOg_k-BH*bxF?+~W^jcT^ z2vV{M6;4^)-7^+MragPl;HIF@=F|g)sS+c5OIC8RKZx37Bu(&qt6qK+*8!rJY;GX& z{!YXTOfusdy!pfKEhI5ydi%8iMyV}5w}huXyp-%mY%V0wXYUUh=DzzSUI3iuOKsG( zOnFYgNw_?cK9k#L3tFRbyF3lE{IMcJrd>a!Ln9L2jSoiA*rPo%q@Z0Y1J4O7O(bO9 zwRHvo{4%t!qeawAI|>ud86{KS((>~v=Gg^P*$PT3VG6}_n85MJXA)kZOAOSlC_X9V z?5f%i*M%I#YH_tll+#Sofc+Wh)04#!_QH88&T2yci^<0YVp}ytHmsU(e7vw;+ z48ExaoP%AU<>Wn<539-Wm&uDGfofzgqpM_nSes}}Y6FRQJWa&a_FK1jKyR%>)KC3K zWQSIEQ*tH5NB)+loD$Up*ASWP2M4yyL&jFi7YSluFnj0R(W&Q5H6+t!N0Ir^%wX=U zp@bU|NVlOX$wJNq8Ji+r9e2sUXGzhJc9h7cKRRwxw^zUFJd2b+p@q0NOOjA6@UBICRMRxeXq7k-Cx?=@Yx8Ifd zvwU~U!VdQHhlT&z_Oh{8(SnsG{6VGvycD~Pxx0`wjLVS@h|QeJrG511+>u=Kw!(%M z(@-h-3p%eXs^=!_w}B2IhGzQL!r32rTsx?H*+-Jz1^>`tv-e;#on01ZG&k&LSFR3V zUo&tfg~!)I{iZleo$vcBh?ZfDSF-*}N%e)gdI!YMSyGQYD~!Cc`gF7u7q{JXDhA)H z0>4_Ps#pzWieh4}_l({yJz6kNir#`n_|f__}2)C|cZ2)SqwV=*|Nv|&fe z-^SyA?bGJBwI@hAm)ofU5oV@8PH|7Jmt>du^?6QMb!KJD>hmk8nx2?Vm{! znJFRX-l9fd7UPA08m5=Wu*c!?XgQ>YDu9P2y5R6Oh9nOV>U;W#E!Wf1QVl&^r(_aw zcf2>QV_!?Z-(xYvd?2ZWbB)jKxsITW=>$8Tv7eIoKWXt4=-O1n6xd(dPZr&~$hXw` zSM<55qdlZF$dpU6hD0KJu6884l;tTXB8()g2u+E%MW+1$sOK`UU;3 zZMv;ei*V+76A89_b?6y<1q@OxFfv}0lM^t3PWI?SVipivGnhUYxcB^#w%oazS327l zZ0`&YHsl_ytiEn+k?{KF+1_}iL$`?GAORm5t7bc!0>?8~D4*$Bx07igr~0((7z0fe z9~o&vLjk=Z_d-UmKT=saZrZ#=yR)z!r(yL!vdkr$6T-_(qxisdcNwNpZdQCP)H*gd zEof+AceKNXS+?+puSilVsE~I7Robva?Iq@q4ot>Iajj|po>sPq6yGawv9BX9J`(35 zJS)XcW3`oKSgTPGJGGn@aq;YOpUl^;uL-`vzNr7U=#aIcSLIFOaS&>1>LPG1sboBy zTdHhST@_qr-3pmlv;2#f5p8d|vD!jwQk|EAH~Rj|x2L*|jn`OgLspDWyPGKp+qmOx zI)56%j26^iT;E!BM?U- zfCJ^|Ow5GF=7y^(uP)WQy~=Bvpts9JeRG|QnA%@8ZxViV znG?~Bok&+ZjF?Ym+ZuCcacNiFE7E*t*jS!28lWW+_l1!Gcap@~WF^LynDNAw6xsh* zTor>1=lq3S7NU4)w+X}Onp-!@A;w}cdgco@Fj#SS?Pa;=g54_~7C|)`lcj;8Sk2jJ zev=67{=D58P&mb|WX*?ZzqXRzZJ^Rx4paFX*e?#7&aRn5*RB^=s@?VSLfroZhesX< z=5;J{Fp|l#LWU#oTvx^95{7h05_#@v1Z|OaHztGFIZFNACSM?^Ic_r6=As>q zGr$k{o>3&CB$YVS67G{#XMd2#i@pZ#HU`>itLPhGKY zFQEfB&vLdf#dF~Z(u1`;Fr?Vco@1cb3X)^TgduAlomk8}-6)xfmj!IGtwG(VDl@nW zUW-e9PiI0IH>Gp1o3C;qt{)1do$?CUa(}Bf$H$`Y+o*ZzZOjBK=Ei;tKZ{)9{zCnEzI$#rlPG*DHKdt7-{F36@*z6cV49Gq`ix2q7(ABV1@CvC z!CR1*l~NtZt)vs)TIX?sc~{_1;u>~A7wkm`vOh#mI?%fiR-Y|mD@-WTb<23aVI%5p zXg8e@316aQ8l`cZw4eBtaw0<)!GmCFxI!0IGcz5fjw*@)-VzT?Mw^Lrp?1s#wc)Hz z7p--?*fO%Ue<8ykt&p2@!&y}kBGn-&t@29(NED!?1Qq9U<21M#7^fAWWCS54eK3)# z;91vYU=EQ#yH2O=E4%uf*Xs)k-=8Z*Vw)3jmne3&xU=ADi+o4mt2nJCkl``dO(x9H zW8t(hBy?6EWcdq6a0@p$q|>9c$BmZMMBrs>I8r2wIY8z_yhzhOEO4^Dej5>a+P zJ}uLUMr@p}#gM_dZLLCHX{s&q8FYS=r9&-}SLk>)eMSAHO^ck7?q+W{fu;o$T-1(r zciX#m|Hb|^iH>+9?bvY=;yAN&`lmW-KhoQ7T!5}RtWg{QkCgYME;R=XFW*4s(x_-o zXSlpP8&4@vqD%gGMM~55VM@stFaHvo`lh2EkU~D0VzlIEk+E_J50(R^ntZ3VnR6pwGb`rvEF)=hdKuN`G zwne1`k{DlN7&v$DBE@b)E7iko-!%BC5<45%BL-M9D8TW=Bd4h}=+kf1x~`w3 zid)O29)6@LHqWYEuyog%5yG)v>wrNhw!g1x)||pPx_`d`;T?{N=VZ>S-I3{`dM)MD z68gIfsi4(knasOI5DWy;U1J=I{{wM~@q*vMvPVh%gJAxDSP!2HXgb>59H`r^nr@bmNgTaL|%VRWY)x*3y|^p{gD-Zs2uX;ZVSoz zpfEq@TPi!F-QM_9u=nu?(e>PTtzTo@kCLv}pE#YYIy5e%tDxX9`XdPha)iUMZTfH> z1*gw+y8{MrEL#Xl)oOp`r+ctxF}IKldfk$p`r(5~@s-iXMm-bLnJ$pMXn%c{KA0&c z!}ENq9GiANyvUV^9}Gam$q|pGlxuc4Zc)7dTw>0wVbQpa;Z4<8q*y%2y5<(`TZ@op z&wLE8Rm4G3Vy&!cA3L1HB9Z2L!nVIyTl`2Ekub*ds-fj}E@U!SmWojhiYK;LV1Dj< zWGb`_`~2fGlyP{b!Ea)#7+w$5jEXCd+Z9Kfn+2nx()v{wbbju&kbt4!k5qpiPut_S zB6zgaYK)^IiL*_#sd28rzX!n=?MjnTpZ=iJuYmfv^v^}3|H5?WUY_?;S9}XPgWZ-19SrO>MlfYrh zG|aO>h3BisLZfZI)__`*oyk~_lj~ZuV>vp7oFJH$ou-|$jc!KERZi7>UoN0L~4I3;2!b6<0Fazr<}{HrA+JUTa_5Xf|2^qwECS+Yyu zLSu}+0+XVTyEPh0)$0!q;wj{XI{>=iQWuZqo8zTiwOUgbEz?}_*sDgBC(JP9POdO+ z-WBXGW(9{z1u~f`3RGsG^Cs;ltIo9#2ipibvRQ(#Mm5}D+HndC3m?*MTlPeA2HJVO zA>``JRL3NqZO*5-jl82?aM`97B6i2p%l(bE2V=LVq^wOZBGB_!gg zDcWCOnp+-EnpH=EVM1J~*Zn8+mOKehPcLcr`#iR<301>!xA_E}=EPvjCCWta{_#5$ zi|BUQHe$L&Rle>K1;4t2t>mD%05u^Ks1?p zt(T0))r3ebaxI}bM+3%j_vX8DEAW&YY`tAQWcP<=O?bJQl7^TtL_)66Y_f}j#&a77 zmEJy|4Ts(6eywsmU2Q5$;DI^+06)dO#)f!{j`->sETA^vJSd*!|fiTupa%d#bG}7wMNb;dw z#Z{LN+{7^nukLZn{Z29qJWLJPGJn9sl;nR63`D1%Nsu-~@^Ib}emsIezxG`BhOVI# zTjr=B^+jw5a9v+qN?v*C@P23Sv7i}v*}!Anp6J!q9fAQ$sbB}IK~tx)H>788BKumR zb3Z?w)^Wu?UJUj6i`K1#3@r|;#WcK$q`-Mcpdt?yFxd4qlxZ|lD*4NR{hTJ5?|VeX z0VZ>T*-?&DPIpiJ%F&->X~wCyLnOwJlHMM#;gamTv(%gi(}mFg~@u7nhH&7&Tyz_4}pK z9PIrhkWe~Ng9u2=GrtCjJyk5e3s@!?{ea6(40fn3HzdZR(y8opK6t{E3Kg?O(3ExBL30*J!gMjQE*fEG(5Tl&;?mR*|Bf`_+x4n&^$OfyWDLA+P@|<-?=uPwmsVM zv|J2QJ>(9hz&C~MKBLBjRGVA2-RHI3uDYti$>ek*Grqi>O}?kfkDqz~`vG-$kEhZN zY$g^Wn0Vtw%s;3715kYpW0hydb7h)~y;#EWEf4`YU<aEeAkd>q5i$`uKR3;`+|iT)TeYX*zHBy__-<&o#9cwo@u;(DnK-%})y`f>KjUEA%v*XFo(Zc*A`F%ZiAXufiB z@TC(PPo--~1O1!V@1nH4l#;rMD}nJfCV9N}XQN5op~orL#pG0!+ZC`kU6Hh5CdCGt zg0Ks8`oeLqW#k;Vfw#v?WMrv!zd%U={zw8-qdGe&U6j{7XwqM$AGtrsNfQOgB+M-< z_uy3e^a`#Ad1X=}uyzIe>KfAZ?d|}#YrIzNrlc6HHwC%+(Bd{k`DM}?C%Bsdy_`x$ zI1D{u6rYfRWd>=K5@G>ffz<($tIt$;!A|_Sj4Y~_B8La+x6XCJ(LPB#%JdB9w_8h$Ksc)CjG!o6|! z6nTnOG6)yL!|M*O)`rP-8M*m_W6==PWPt#K{ zH6`4NKlh;v@JhZkfI1P1aUGYf9}riIPqZM=;TwlJdyYU_H=Mo~p^lF-M$G{K+MyrZ zd9CJ^i?^5fhcm_T4iW)EqR2v8z)Qh%MI6ZCC0`*PrWrO zoVtc6xPc*F@scV)h6wDn*ggdinvV^`e&zL4TLyUTyBO}u){o#)((<@Bc%+!)-a*p$ zBQC~NlqY+PK}W;PuMW_otvW=iSt_5#FbC&zHj8-`=IL$QgGVqo%zT zjk9LH7vM-?8wwZ>zD6A=7eBXmDDi1Al(ny7%gX0b*?F zrrlNOcIRj`+PGMw3V&_M(--XSt(lO1^m)Netg^Dy-$22@(ABbXn0*!jISbOe6H!&d zp@c+1fJ5Xuu-A{W$ledcZ#TMe0S8yE>_?9uGX^|7+3(NhlL1f#tnr^i{5>Tbo;xWO zIX|W7_5`80kkD_Y7PqF(CFwUHbRkcH_Ze4NDN7d3QlspL)b1|eNYup|<%1Q7r>yZ~ zRgsYc1R_5Q(r4;8pD{V69^)R8rtsU6H3p3)R<=v;huaKl!$p+emmN zVfu?|xatO>3dE{Vzmup@PGC0qb+hSZtK#=Qe}nHW8gk`&wyMnUZd-%q%|i-JiG-)*nP73Ja)gZGW&k}rh+PDEV{c~Kfj~*)Gfu4E! z$bPZJA%$MoXKuftuak$+4bAVVS4R_r^09+wnl4itp<{ zT?h+}yDEVSbphlED9i$+6QCrIm6{lVB!lG7#u_IAuVk`{TIis!XH2&!qfi@(ILAXY zz~FWkm1ulQZTD-%R_rBue}fNr@99@R(FbC2Yi#`Z*oMV`V60?Fgs4Rs`h&*Fy5dov z#ra`j=l8ST!ERuPn0_4}=P7H`A61;@c!~ zyUfp*0-!7#UUkg-B#=A=tm(L~#swatQ|o(*JuRy$S2({hz$VyjT-i)gU=N$pYT}a-S z@+nSEI+=(NC7xC*-mphjTi&`RPgZ&?92ginY4MlI`<~C&@oBEXcse=V$e$-^)$1f5 zVS2^&%Nuo@c=2ALO7l^Sb$lLl!>KR2-a%;h^LddVX!lsZ5BkyI!S97;suFuHgxv6> ztAe&c2Y%umiarwgJ9wQl2rodfc(!oZ)jJ$pq{>Kuq^?vIbUUYQwtFK9Z)HCe9h44S z{a2?7UjlAgudiQu>!qDLS|biCMc>QIuj>uF!NTH+^LlpiLk&4ozu9j=y*BMlT@o~B z58GWLATxcY2AfGC?64CZ#C((uNs4Edz2S4kx43(I+E2}C6D$~$uGyjRndul7L+0rP z{8dJ9P5Tb9!xBgxdBc`LD&2m~yzgTM_F`ZIE-;FGVLIM=#!AHD=?+;!2BSFONZLtc zT?9f8?lK%724x)*_tLYXqw8+FhK|3>UgbUE~M6aq&)LH32+XxOgNi+I1m> z^cBBt#eW zknmcY=Un&HPWTzW?fI|{KIgnfhTj@}$729e1!RLmz=*1#M-T?2&NuR%Ru+rpubUU= z@BE!5D%>_V!t0%3NMHtzAOdQ1t@&M4#EO+li)g|}37(HGe*S4mf7^6GLwF3+fZX_*IRTD$3T-*-o%XteL*qfq zyH1H63c*%DI)KU@klP9CA_)zfwsh@oxj|bJ_ZhshZ&rrI!5{3^yGK3YZU~{SQlB}( z#@q6}I}sYL?>i+u5os|N#wIK@%5gSu)U5f-t4|MDz9!n8&kGMh*3RD$o&g>1Sb{pM%P;|F#eOeDJlv^wqO@%O3?pFX8r#; zdDvSP47~a&G}Zr-Y60wb@R8UD&Z?;5#4C;#rVGR4S&hwQ+hvauKzYND6K#R^gc54m z+|-+i$Web`$D4@EX8uk-|LD*L{Ee~z$4w4ahEC|zf>Hlp>bQmd6W2K^K{o+`z3xFj z-s1JXKV0lz<$YjvHKFVd5IDifIEpX^{I64dhPQ%8e~9T3KZbu)iOd96n?(%xA`K<@ z$2bzeD5rgP4#1vC7vUd$_JqEXMFLfj4Et}A4Bs|=1J4BLCAn12{wKKv)cT zVA%EPA2SKU0w?&gii0n--+!BNB=0bIIyA}3c{L@{|4p$Mq~2TBaM-W^S4k!e-e)nk z6r9_>5dy0OwE&K93A3h!H&)@N&n%O%v!n>KluKY3d`#~443`sNUVg>do>%x-j$-bL^k?87_k z8h5^-5SXSuA-==?sE^riy2D5Fc6v=SpiF@l69TimlKQ3(l-@rdH_)!2nT;QP;xJL{ zB0_v-r--P8-{vbXDa82;*O0 zU+lz3UW#RdIl+|zTMepgsQjHIwsi?}p*H7I&8cUtnni<=ZrvOko$*|e-_!Xu!>IAt zme#IxENt}Dbz=rk#^{YR#vc@{8qSCk!eGYh5~bQmW(ye&ajMKTMU@=LhmywTYZ9at zS&_2VhB$PJnEPDa+g0C-t4M>3&E(>$!Qfq+MBZ~fs9e=8J-Jp>-C|NKEJ6-P++X%M zHv>g1j|Q$TdqTra`02;!R7r%psj{jMx72jCKQLx)A7-!KRaxzWuy~xCL$RBM;%LWk zXt!;$58tGYWBxtyoB(VIJCgrl4263~uNk1(WD{Yw;L(v%Rd+Zea6WZ9J5-U*s%jl| zqEN1+a?(;4S7RYN$s~4|M?zAo19Ye5fg2}~X89E|RtiJz0I7h^GYstrBuEL`46Xo`wW4%9S6 z+@{F}phMQ<_{Vfr;&k_Bf}z7rd&acqx!oR{iwAkBT>gccijl{M-Rq0=g3(pm!zR(`vu<&a9Q zkSeb+XzNhe2Ha{}P`-Oqnw|Jb$*b*AlBwZhVXxVjiB}TCfv0(7Cfvs605`7qZ0>FbXidCNZJiH@}aUN2$*cacI z>oOgTO7slX4zUjTZ@|Td$FHi@7VTvwy>KRsSB1YPcN^dy?kcLB=JxO6%~s-?1uo7} zGfojK2zRf_vzEB^S3m4K&oVDGOY`ZR3E{7{8?{mPg~4RYr4%}I5mA!Q!3;Tgjo39oNBGkn<7urw+? z=zj65n{GS!xY9suKkO-|HwP`B`JXungJ)~)ft(=(2Z|YuofW$c#>vqU50G5Y`1Z1@ zqWI;M>!J1D=~XA$qhAULmuagp$7sX9TNNw;)pDM+$&NYnpM+?#CP@ES^5oPbNaG1YiYh}F#~;>O&D^hh zLh5{rj!WGkC5tKJttBltPWpwi*LxxH_HxHM4X?e9aRa_%)YT$~&)_7-zLP>KR!t@K z_@9}#bw$U;O0Hue4vKO@cdg~mt462pZNjVWZH=_pwsko6I7W@(wzInz@Wq26NG!7x zTQi?eR(HSE(+=#r3#_i;vrRDfNwwn1`5PR#*NH1=C;ow%BK zzt8o=uOyqb8vV;y0N3Gk@T>s373oW}ro$;Wv1SAfmH#AvcN>@hHH#L{%-#A=0bwOctvSo+c!M(~1cPD${+K~(Gr{DUsvW3vR7$5&MX@2q3^3Lf z7%7`TKkI!@*K$k-nmhFwDgF~}EsRdH^QFz#R@J9rt%GdkjN>iY8KVzMH zA0PP7@cBpbgykN`SxsSq)9`)y-Lq=XAgR}T1HH1qrMk5?V>+k^r{5j$ow@a+QBm#Y z4Do&|?;GDF{f;(~!1lL8-AOBSn&zMV8-%zSigvq-lLh!!4v98AlnX-C2p2i8fL1A| zF0!{+jQ+pDNeIAP*}~V&dikpu4KivH=F5uei?KF=S@pFJyF9w4m1L zv}Whce)7sl8iU0Y39(&ojKSw5ssyT6LTFmvchV?ZKT9L%=tWQzR;*B5No}5|;zy=Atm8d;!y>X3VV5Q~R5xHzrSZ$_P*e37Vxskh6gk+&c+rom7C{k+Ic%cWD& z^{k>N>BoDGf}vlG3dZ?^4_2s1oz&V|6f&*Vg2@LLd|W2EHB5qj?_5{5j2pebSNtXr z?;|~WAdG}-xmZ`X8$CO7P#PmqwMlP%zm$osm+VF$5R(7k@EHDqtHFfhYI7}Vib&P) zBvKv8`-U>ya3z1J^H+XI)`ert&2H3=h57|NH-0tu66v(5zya1k|Fm`O_++Pqvl%|DmuIGYaar$PdND?r*&n&2P(da?=bwi zc1fJO{xL?bu4=h{H>37d36(?Cd+A$FXN5}PQdj$jAS{+smyVfuqx0q%0}m6==BPW= zB{w90_e^z~vgRsv6TWhtz)vW$hPNx5k#_g&Rcjm38WI<%MviJt=S1=leZREApz;O9 zW%Q-Q3+28R8HTYNuLpbNA1No!bOK(g;z^=448|IXe1A}^K2doWmHDTjN5Xkt-(TC! zQ?WZLm%nu8G?M>ym66YVGiCiSGx2zaFJDURYJE>xzV=j3C#z}F^J39HeDxdJ^yby~ za}WPN(*pZd$7|z;_nBG@z8+(dRjW-)DV{GLF7+%pN)HpZ;2uQU}yAbO}^}*!wryoQ;UTtSFY8q@B??^4#)EG-iD|PRxzlObTUJ~|y!3ZL^ z6FjnBos<8~4x>HZe%y!0Oo<#PEeJZf5bVyf;sVF%DfZXLmsR3^s4tI$4;19%D9p9qRRJofxcCehzU*Bg|8Cnu;Z+QtrOa< zOCsD*X=Z7&QdMV>{ynOd~sjjlTq$}g~k}icB7K;@SG_10Z#&c+c4O*`rBmM z^rVF#ljyp~Ye@BHb%)otowYCNdG?m~d-3{n%~Ea_8oyVp)IAXOKO)xu^84=XbZjwW ziQcn*${Z$dbtaVsUKwTtD0%7)XP;*f>z;Sr$W{9AXY6<+K8No{e#yx_^F0<8_S`$J z;&pRpsaelQAL9IA#mDo1#m8SW1+kI0E6Qn~=aYV_g(bOkB!7BqUIKPgNt+`h2^Yw? z&??i;AI;_onGswa$zed+cb*oRo04>%AjX?mC1X97p129`agH4j-zDefcB$aLm=$j! z-SYNAh)}?<=DQ+Q%ThKo!SO?UeM9lW-F*-86Y(q!Gi$W1L6WZcsst}xZrD6ydai?P zk1afgIZ*$Q@&n&vUE~g%+osIoZdKCK#Nh#Z{(6uQbgW^$Xcd^xKHguG(yGRB`HI7SOo5S+k9OZq~W{;$Ei3YFtXyM`0F*%N`Ls2^LE7*@! zEr~|D<7rt#_^VK4Z%}-+d{Qgz#eGsavd;Cq5$Qwr6Kio61!hg4g?a%TA<=VkGNWtV z2`E_1Ocyz2(|tVV>b?_>Sfxk5y8 zn==s&);%bT4*nKvv9FqiyOP&G$JeOJWNYaz6Vp8?m_v9}LXBWr7=7t|3cFHI|JTy1 z`IOt7pMLY|rN}W}NT+j03-sVib>gZ!x^I7Thb{x}c5e1TrA^32(fX!9TWa5M$+6kX z7>(A+5TPd7afCjSXQa#riQ?&XhN5&UKB4+$h0B$dnSI>vXA>WUQu}@WBsxqs&oQSk z$*l#!S*n&5-apMd680ID%CJ}36hX#89p^28WA~IVP{wH3IwrKcCs1N*SoTx#Cn=Dz zoyP+miUh2|SJ0D^1upS#lo>e8*xob4_Edju-+1NK6}7c?kWC%%DQDk?5thJ5R@m8B`1o3EZz-C-d|hekdk-B}*n( ztkk9quBeX!)Iu$CReBs&jX2Z(!$sa-ehQD5^U1dCbdQQNHWEZ(Xw}x1vPz%pe?4RW z{DAc11lkdHmg!|ZX>@E-q=f0?OwTsu(&ksJ&aZ6J?#4UG3uZ+<8r2i|u0w8KrmMYq zm_J)kw|j^@J5|c*u^Jb;QKJHe0Yf2j_^b=6y2G~UzV(=^D1?|!HrI1bYm?PWiVDMr zT}xeV;qTCkT1*|ppL@RC);l8GV`2@y{*M;GptKJmZkyMPGG{GPi*EC^H~nfxFI(B+ z#ovozz2Mebk>;$fl)lHb&C97Eg&~0Grt_p>)WP?|ebZ9q_VFsuvonm_i6r@qr|66F z-xS*V-4^b3nzsoK7TDaMH)LwUEaMJ_e*q)|6#UDEI9aa-tm3TQZm9wlgitIqK2L~h zr~K}Ct$|GUkmdRHTY|#ZvLx57Jj3svy{a3_6@O#+(&)JAV)M4oRf#tFxYD8M?^Z`K zf-krf1mx$J^b)H@$ttQd9beh9tPwcAIU}UxC@=8ciEk1G1@d{eG@SBQvJ%nPJlGF1 z3~~lPJ!C!@YlzrY^m-9#Ef;?j$}=$Fd{8|Vj91y^!1jk z<9o{btoz2m2c6Pnl5P7h2W`JJ2WXRd36QgG?J`0j*!+$3L44lmm8;9Y5P{3}hwG*m z_r5JmOrVc{8QoT`$RWIt)^BaJml|la-6uWu0kKqJj#qJRw;dML-#6-12&O*WR1i4d z=VMqXl!@l#bDpj6q`kU-m{nB}uyQqRZN58FPxt(BGu!`j=pwRuBu^r5;I@s^B(=w< zTKg#mX&K05{oV*Mz|ce5e~1>W%zmeaKr`#CnK*gut@Tn|+&9MV_m@_`>W?NYXKEw< z@;RH@5^491`Pn}kOOpjKlfP{}X@VOrT`Vn-i6f{IqPN_eo<%5}@8@cDI$7_fUz;IM zQ7O6Ls7UiDT`wgde>^xGhtrhjQlVH>#5-ZyRb-F)e7Vi7DQ|57-O&eqKFNzeJZ+px zXe!e++ngf$g71 z*^^G51TYw)?}9uk0rRUCqRnqM<2mEO7WwR9_{l`>u!B;lh|B@6Tb&cSoxF&!(+Jqvs>l)hKG?z8{PwXczc%jExUUmr+LJhw%wC@s-Ejc{?md-^?K1Qu0g|+bfTP1rL%N1IR8Mf7}fH$=x6s zYJO)vG4*I1Om`sF^)Zp0<-*lmpkL&`V6FTQ|HI00vrG*Zwg=ZjYuR!&_3FY2>cOad zW7t!*AFA5VF)?2SNl05u@pY;DaPHjgn-s6*Kf&e9L5P~m^e(SZq;dZ_R@ZEp6 zEgGYQz-M}K*O&@rRRu*%;#U@=pd^b~a50iyzkCanppNDKR7)VVm0_9ZK*Xp04V%> z9P{4j*>{u3CnLQH%B?0SgZFpA34vbGjlJV*GG|7Gj?bgK?kBaGsz`@DEssNb-%#%W zCt2lks87%!1OS!c^nZX#!C^ld;7c%r6v63S=!N4dI}A)mM}lGFBJ$MQ@o)dOFe3l+ z(-kN`%&I1gTCQ2cz?6QuOe=9ie@%IpYx=aU(b}ggyE9_j8x_gj>9bwsKZFB&j`xZw z%pBFsRGVmpRi5XSm9uE-+RCoRj*O-}RRi%GFd!ZdhLXSEhV{#S&e#1z;ok*DYxx)_ zw%_P{OM1R5c{`7A5ix|h{xt9biZ@$i z*^<64qVL&($U#zVdV^jBcN@wn+&rr)Y`cLZ)B{OkiSX1aHI^_~i-{E@vMko|2usjv8+!7Y{q?nOk63c zQK2tVq*A7xG#$XzV80=q!sG5#KcVbVWjvf~*dI5=;w(y5hX@*Yeaqe9c~6k|9bO@)@U}uz{pASg(W7#5k4qM~b z?HOCSoWE)0N+PX1_0wu54C{`9#a$o>;FjqTb}{cG?`KB z)c-dMqY7>s*{=q)VeG=huvsY)g z->@+-{C1(_)Jyug z#M9au%$2+<|Em0rZo%Uu^5E19lR>Ldu}xO7NWR-m>@c49&ouAVYW(rt#e#&odg^Pd zIo0jyGA5T9AFApP(Ij@$TF%`~;tbKCHTMMObe3Sr1vHEWatcWNC=9HRa6Def9sFrA z0tDA9Z66ZAPL$6T#h9tFNQMnz@ckek!XOhYYuu)5;j>#6J;GE$heJ%HS8;k4C@9Kv zcRF$H(G1-L#Qv@45%?iaE15M&JbB6%u$oe)`7j7X6~a6D6; z$5RMV>3}<8KDZ3_hzSgJ*r)Nh;WNQ=>USZ!0y;Lr)QR&S*AFVXmxoKoeU#Cgo~lj5 z%vbqRpI3h>$Rq-T?FXd3DCMaQ?Gk9=sD4f(Hxts2aHdw(HvD;~-PprDU-?T76$1eD(PMl%trdLHBm5FGp${`;d6i3iPks^ z_|acIj{B+Qv-sh89^3x;ref9!&ZrD}E-u%a4^X=L0yU0&*vdezeaa%V}L?~4AD#VUg; zI-XSEYw}pm2NZ_7WG$x@P1m(V#uE37eH=vf)lj|bmr|*wdOOX`X>cMb_8TLKV5(#% z(5gEeZ!`hhUcTbpAOUk)1kRr&i0}*;TBr#DRICz50$g>yBjRl^@$s7>I4`Hd=luWz zPUq`j*a!}160Jf{s!6zO9dKyldxgs1QZx80>bgF^_mx>_^*keInCa`3;lF0Lm_iKN zs!%6+u(8(lO{?PDz3K?>@k2m?PEat*;Mz;KvllN0ODJC*5+TL-Y<7QI^a%_;LQLm! zp6ZSObOxog|3PP9Lnx%ieTeO+<3~G~CFinkQ+z~w-?by3CCV~$*FI=>xj^eesF8(S zIJrc1;Pr#?qis|4efD5ee zm|F)kHlK6V>v^v?b5gh&brE>ib2%UVqV%jU2mK9#*QPPJSzvl4e!j_h&>xML2F76RHQWNOHeKN#$ zc4Xal2YMjBj{=lC+H>v)Eu{*&q1|?Tcc<~Vqvt^7qQVrjB)y#p&%})c zbh`~-@}rm5yt`c|jrXp@a3`x9pwa>7NfGAJ?D zPrMgG{q*rMelc-r0x$6!tKJiIDjG9~+!jVhpL zqLhbFe4MM7Bk{hqr6)y{M`Q%(@x_AoH0~b|x3=&Q7_|K+ag($W_rbh{jQQl(yg?r$ z{JoGDS)Qf^JeO;J)lTqXX6T=`;dBZPt9`EO3(+otEDb}bivakU==AWo@5?>Ut$$k8 zkr94=Yh8K+Z`4ll?5!4Hc27yWNPl-kAK3d{H+|x-$J5Ob;#p5C#I;L~i0AIM5B9De zc5_o;AJ8z6Emr%u^%)oH?f#6HNzT3-O@<6KT>d%AF?x6+lnD1Nhaqbe0d{Fi7_wYG z31YX$As&qv%H=SGO8|gi$w9TX{16dxxLsT}LwmgmawE4I4BEK;A{{qVE_=VOwk5DV>n4I#vU7 zM%L!*vB%~YWO-`l{_GWH zq!#q?lAql!q}pgODHY-R5w51q>)llZB2X#>Wb^@avNT;e|3}UtZ&iIN zQ9^0>S#qP6W}jQt3usg>A|vm+lU0)qm3P}PE2|j1b07M|GUXxW(F}J&(-J_j&gO^5 zkc=PpwpB4QgterZ8>0IQcbO#IG{RcZzGdbyMwX}rUdqd|WF0THWdE!9L%HpzUcrn0 zVEO`BkHIO@^>=9J2qXV6$49+>cKQWdYkhNpdN^N~eyZe6-tG=67kir^8wmD^-%*F} z?HJm#=WiTdo^hiNbhEL&2kL>UAO(MgJ%x%;7)a5WeoMxW^7Y8zB&&Rm-*>Dr@yU(^#z-`FgDOw=?1$#pCYL-Pv#{{0xeTP zq~Ko)AlAn`QP^vj%=zx2n&$kN5AvD@FTo5itLOM*845$xr&&0?C_ISCAtgV{DXIip zN$#e1S;OEGbW`f>eD1~*_sKCeYI~w*c=1o_K>Gg&R$ger$_q&M>JxbN)B6poZ*H3k z3BF`&vJ_w_M)Skd&JLh#%owE)@=x;;ZJ*Ot3;hqg3oPmOj%qrm)QC78qg&pE~G4_FU##Z%a2}!1mErkZt z1(E9sbR6|C^D=n;nkxELV_e-T%8bN_Km`hphX4-d(eO> zNA%iHFOaGED}FsnlJN+`>cB+X*@YPq19m$F;nRjreb?))f*phprYJ$~nV#oruo1`% zdeh87q-p+gL<8F)FqD(J<{`wDEDGI3VQS7Qc=J7(2G`j&P#7l*JYFOKOpT9b2u#xS z&g$Z;)Lhmz0|IDq(6hZt9>#2Jr^0)IS)>5hXuR%A`9HHexp(kkLo7sh`%MSicFdBV z&DV^s%H$XT-E!sFwt5JlTqhDN{O%TV_2pBU*{x&;4?2_GM#{D>!0@1SsCCLQZlkI;etU~ye%FPqcu$1Qw2*qEN_DZ(G z=7ww}ATJiBUoC`k8dfY$`Ykk%WWS|*33W6M9WAddh zW8W$uRhnC%GxjlMKziM2mlvaDwt5c1x} ztK+EoWTeVNLVx7tx>YJ1J-#MFyEzgbR}X0(2iilH&69vF0S$%3~yp zcv#sO?G`v3yk?;Yuh8{XzdP(!^ln>+F#R0>2xN0^Y9gWJU%G!X-C4xbg(^(MyBFef z%Z$fftP7>VrE4#0K|&8Z-+~*Fu}$6C{k@Azz9jSr-NHs6?Ze*T=TN4XdSkfDvaM?M zM#pD^2wTgbS3x37-C7bLTV*W8GYQdQ@w=gCVD3oM{YYM_mstDclpxkhHrd2y8_ z=_hdTrq;;1(AsnKfN&n33!tJf2fKul|NJ13;OxMS7mh`gPh`(dpS4nu-P2j%%}lrHsH>j!dlsgOW85pD2Vgbb!_Gy!u+y)I!;vW_&LW{gfV z0?k0@PoySiI1gW>4orPa9mdAgXgNTeUN>t+YM@F7115)7&fkApSnRNqyI^J@MAG5{YJTD80f zCOlHv=4wJQ(FRF9@&rE`{9zKVN@h|}SRm7soOQ8exzpbo&zmK*%+$v)yDHaY0`m?` zM4cZ97Lx|=#bnAnjv;tuZfsFd%ve~{Qsuw*utyk%xxqNBe|vgbe+i2;J&3X;Z{7%{ zj6@uYVA*4Fjv6^fxVovma%#7sX5dqOF%HVU-O81}C>Tru!}lEq^Qaf2ASZGfr|Jj3gH zOS9+?I8ejEq*wZvZb}`eD(2?qi^(kU2SCn)T!!Z?;b)P;hagm9^K4i$N#+{>qk8XS z{*T4w!wZI(s6XnwgJhr-L zto^?#<&YD~7|bTk5r$u`Z}C3d+Pi|E_gq71KL(Ta1KA?shCi|d)P16!za3E_33aMi z`cbOIMZjt(TB>+(Hm#Ek3KX628!!wvRE1hEqvNuKK&#bQ9f8l%agr)Z`5}^!>fvVL zp*rU7awVEls%Pgf?Rp<(Z+$TM6w-|kfBnlK8UZ)O7nwJ%5KQ-18uUgHVP$bGcxt1{ z5HitfMa5(K-#?d9GDvk=?TcNe;>BguEF3J-Y^Y42Q=(HyQ7TrRR2D@3A*q_p3pBe4 z$=SeN5S53aXHkGR4vs|#o)A$ZifS8(nGo@MsP4Btcx_FWWtwn+E`TcJgS^k<_q|{) z10p63v+8!3Rr~7G@ITTUtN;ldN6?#(J=j@#V~0@S?|EVIs}=sguWph-Xf{R`(7uQT zXrt)W@md}@eSk{EN}kQNdAEJ17XY#_XPP~d)X_w{e_Axo_vecza6ysXOTy_OT5G*f zx{;RjN@Gggc)&jynxIlBOTMF7Pn^)^c4jWXap-mkWK#y44qEBehT%m#^JOv_Ev8Fx z5+-xSu!>~A_?ci35D-*4?kIbfN~W;J#l>Y`u;95)m8dlmPkvRJIANk!`kFh60P-2v zpwExOw(tPtF?kn!^#cGN7au7pVX`=6+OPx3{dXWRmk!qChbSA;0FW}-`|BO1Vr_JP zFlt|Tx;fSv_MFW)0t9Iud4P75qjYBc-{d;93LH_d+!LQvgdc;v&^Xa#L9JZZS9_1d zY785?Yf;u>ER%iFcD4RIosoxUo-=sz;s0O>-(OR+Wa6KMVYEKnyT4k73DC5sX-HZ! zw`*(5!V@MG0AX7q1Jv`?{&=ag>hF(7(^Nm1;B*lG?E(bBdO7HS5v@;v4Y1{`Ls#kf zL701d z83a@1wRZimWAn*@T}$2WFdRD=#MNyq5{`@GqV$~|T^l{$#@`SxAm{{OuM}uJr!lq7 z82}gKBreH9&pXuO()|wC0MOmxH8%@9pv83@%6<6#QKid~evw>G5U#x_pV2^q9Vfv!mL#b8{2N?kZgX*Iqc~%WVhbD*624vA?eQQ2MKu_apA|PJ?LpfJLK50H z#R_@=gP*P}e13gE!n8=eT8|EX93UX`*aae`6+X2eXXK4X(r5wnR^y}*xD$Cc#=B|_ zG#bvxAGdULg<=^2urg(i8DY(ATQ*M|hsRP6$o!v_>wER`SpYu;sGb4>C9ueBAVpNK*jyNt#@4 zo_S`+bm4-YKX!`t8vO#eJB!RO0N%~!2FgnzVWDs$ylRQlb=Eq2E11*db3hA()oEAN zGVpHEA5Bwe9n?y~^y^h_NX$bg0cZ9Ar*fnD!$`P?E1Tfm`RuJJOOz*+^1c~rx*1mT zP_sb&Q<E{??F~@yxf0SdC@%?_E}vwK9D)_~dtS^Jbn}9-vgre^)Nxv7+GunNjM#5~0{=11$FwvTWPh7muHhD2{WYd5;a( zsraRc0@Q#>@l2$MGW=li!?OiohSH(U?*y$rFiI@)L0hL&(DUd@y}DR96w_^%-^p_E zU+WMFLdsW5J^M`V(grz={XjB?;vB_uuF69_ zSdOe9#zM5k3`2GS^t!}y1bHzF?TU@Vm}DUDt<_Fh+HVhl=`f6ASe_RjL!zxxZsg{ zZ#L5GqqGeX03c}i{r_?3l9ebwv=*9~g5TefArQV!h^ylv2$AE)TFZqCbSEv*?M;&$ zVyPbemIj(rPAUNi{D>9kS;nX|LE{yNy}U%I-f1?|0Za_!0A!4M@{I5WdaLL4>DZKP zmk1`PGJqI@v`_2F2$x^CiYoTmQZQ-I-L}FDZkK0&PZ`#LmWuw@2>{RG$@X%f^~-1o zwqz{DgC{>SyOnD~d}Z^V4yz0@yQ$M_#^eh-d7otqL39U1;Hb;e+_sC{NWFxY(204u zSXRSD_`$OQtS%Xav7TS!-4ZIY&@sMp@5W1(E>x2%069+!-AluBx}SgC6GWQguQ&9g zba(ghmSy-TNbt^D@b7^EA29nGbP0Kwu(OGA4Q=%PIbhf**~@>B!%GksdcOEqo&>s6 z33*a$jmuNzsY%ev76lo8oFNOw8%ly~|6Zp$K>9X|3T5sI1&^Hl6<@zsma8@PPotv+ ztWR}Mh|!uFFe=b7W8;*$d}>}folUKI0feW*3HE~#szImB&$_SkI!wlMIh;>5&pPvw z`EhT72#X1h(5cOv=!RU;wvRKcdz9EZvUZK?VFhp^JpPBTA=sWiPI}Ue@AyBhuoWPh zUV!Ya^x}#Xw%4n;urkN>zsej&et4>tMR;GK>j(k`5me$kl6q{~7e(7_Y2DIIWav$4 zq6rfaY{4hXk58C}>&BkH`A7pAP6dl>89i;r47lXJXak+*R+NGm!HIjHZjc1bl$(KM zwkAqNkZaZ4Yq@F8)oYXN>d-UTL4rNF z-~mSoi=%uh&uzp zg;YSB&_5FS{Km3FtH%ZA@BdoJJ1kIim7s-ufJqcH8sA7bhi@-|rN#sVW@-S~o=^#7mvQeS=Jp-<$X z&E3yx339JI?G`sRZLIy(k#sJj^WB*xX^kVGlot=$@9MpC{d~~Fni6ouB|yG=B9k*S zo=fGkFcFA?CmxDP1ry$r|EgG&YiVKi<|AkwSL$^>hNWP+xw)&xN^y-J!P#H@Ycq@W zShpWs-%4?uj*>Ex6j7fi>)(w!cW)SXfv(?aw5hrISEktLCz|iyzpqs)lg|tDf=jil zl+ta=vRUc?@`{!klDkfzO;2~w_RuPs$*VP0ro*(6;a)oDaWdTKGp+3|1pu@sDtdUD zHoi{@U-#jRh5!M{!fr1-S1Pq&0v2v`09`+4-Q>iNeRfC)}!xPIq^)wQGc zGa`bTe=931W?0gRo3^*d6?^1V+x4Ao>+(sDGn~d3@1ll&tkqMcXwGXEc440=6BXZI%G`P@Qo2h>*A?T!@a;Li zdD~Y0XDBWOccJZp7T92U;E;-WwYh*2X67x>GQ`f(wuyVkSa#ZkVNl++M1`g-;Qk9# zhuCzAeI$t+7gC??6?_Oo@R11LTBS9gj!RV9t%=|L_S+x`;1l|9nm45TFW^=sEbuC8 z1leJ4R!IXJY}DUs_Qc`WO4e3~G5$Jqy<5w+8>iB+ACt%M9JIy60V}0LGo6F83^8`7 zW?iltdMw_yLWRs^S2yqUIn8lOZR`z~Os>oecyk}UgjHaPQ~KDH^e{Szu3LQ(rqH~{O*uwGx3SS z!uC%C9R>o;rXI~btoE27Eq6Ju8s&}G?+#ldE=N*T0GF`fUw82f+_QjJ#-Si61Uhbx zOE68^E04ZgdD;N%-SY^APMG{^tHOMG znTi#Lk8Tfz4(X$YaD-z_6o*id;bWjy~Z1>KcD7=)5&K zU+0@tn)Lo$yVd#LbH#uU(0@)M-dg{e<6hbMR;NAA(zVAl2RC{JdK2cAN-^J70n>zC zK*dO^J$Z5gxI9C!e0f<}vPeR9WM_?S{K`@5h7$X$y>zEpvmWc)&79~YuvcY@Ty8NW z5OIF3<^-R{PcCK&K5p$vHR6fBKIb3|L5VTa+JCweVd6vIX;H8O+^Zc2US}c;rouVG z_u#>?ndR@d-R0GIhM2oNOICY1E%^A5=Vm#a3DYtz$OOnks-cuiyiV(p&R>zl!{d6r z;8yF^criaUxQ2V|(uMKi6XTIW58CUf!w7T{RM!a1jIlw+CI-2H%;t1@J2 z^UxEu8Nf*i)GaN~{hj%3^a;^QS1+qL>t3`;z*Bt9NB31+`}GEjZ{NeX04ZjUw{zg# zaex&o#|+3l4QEptfx8sY*N^$o6_kGpK7psoLVb}9{n_0mkpumSQd^=l;0zJ>lF2@- zaLDC4vl5UF4v7FbmT>zxQ*57Pv_8wS2%p=jDVvgbW0H+xrA!N1g}>qX*2IVMOMX$L zZ9*=ml8TQ4;(g~nBGnWx;%%=NJJ_$MP?qCIJkh4;4?K@$oOY&ODZhQABzI_7&T+F_ zWd!W5XL+X8)BU6wNazl#j-gW>yMl#H6qc3Zg?}HOO#C4&CjQ3HkIN<=AU?xU!9_j`-7Sk=a70Z|y+MJ-ePKzNe z2jEfA;p1=Lz)oiTz@170#rGg8*RJk2Uux0CrCjre^hrc5deJ-Wzv=+PHH zk@&2XtV!(Rb#T$?0gzPgn)I0{-qrtPP9+eMangC=mAq&p^E{i;0M<3YvzA$e^O1W*ND=G<#g^*Dt% zV#5!=_ijJ>ZDBCDi$q#(Nc3(cg3V7v>|(E%2}*i_h{Fe4K|SsNZ3WA{J>dl5FZvrj zUoc{{Uxy^dPs);|%5@A#oFf?fzxUXgN#?y{?(S98QDq>YEDWen3b>4#z{6W`)BCvm z=fb8%lcYe1KLxp$A}TS#?6gp+XBk~q9%X3(A6rurL}jDwLvphaYwt@|EC$gxv#mj$%LG6*g@Ax_JO~ zMq}Vw){I#}x@0j7=9*}HWsf`{CRaDv6#I%EJ~DvHGY|8}Da)X7qz84DBvuq4GBL#C zoi{~<8)#B=$fq+L_5b{mPVwx*cOmteAR$nV{Md3fwX89U$(0@D%7S@_j?2IlLF)Q& zcVQq!9Q3>I^p|s5YyIUEijK+L4M}P8;EDqxjldi9xB1(oo~L7ddOhS>wi7&8=O&L_ z%GZyN@TugWKkN8@^GY0f0afbpA_eMr#Xs9fhm?`ei`(WwZl<9 zxtN<^fZtXCkNq5h)Y10*ehR27UT%q`EBxVHuw5q{Wk$69jGiFRa#C-SNM^JH z(2_7J8!9{%at2YdQ7AYIJ^e3IA_+N&h1TBZoPJeU!VOq^Q8?#?IZ>>%Sp#8lb$h>F z38>Z6kvY|NCT+dpg?adr|K;J6vSKut(rXqwA029q_0?(DKN$8-(Fra>X+L=YL#mLg zTqUB?B^Ngy&3MHi6ZR`P&AR1X*M9A9D>jTn09_}7yUJ`Xx>kBZT)@QGde*_;1-tJJ z+|t25=b$BGXds%1l1$V<>UF6%K$cq%+grcKiEBc|C(och!BcNc{+<7K(exuUu1ra$k(+{r>)i%<-qfz;~r>-uY%(FEj-PZ zw)>lri~oA&X~K)v;GMPOcf=6$ekzNE1(%h`5oVZrT>!5VVgBETmSBumJAVND)s)qJ zC^5nW@6|aTv;$Mx!K3^rTDQ=CgyRFyP5!i4WVEkgVF%RHCC6`B={J#L5rMDKlY?yQ zFXw^J2pUs#Yh3VDXbT`6HdUtb4Z(~^DD9%6K-c_yjKl|C7^JuRTJHzNjz$@SzB91m z&wbw6N1^r9w4SW(+y35km%>+ZFN^U$9Q?=OP{AC|Nrv_%4DGW8^3Bj$Vlq642<(kDG#5sDY0{GK;e)24ORe6Gia zOK&-We5*g!^iZ$9rY{jz{VCYUR5a;7_H@rsNGebwyvCZch_lOa{hHs$31MnbU2|2h1$x?f_*9$ zcUWUpez+VWt}|_S=f5#)7L6plnU*A^t>lEl)-J$3 z(`!PsU`wxOQ9fBP8&?_nQ_7Ht%-Zy8berOyY08UAGE?l^?E(R$O>+j;*?vh>99mw1Q67a1t%?xp3 zjEFR1xuHS9pJJZGZf!brVPY_RXrByFjqJ&{s@SU#L}7AeAk}Rj_j00wX&R50P(}tK zc-LfI{;cYXN}hZC{G+aNp0Ds>wlUR9=<)D?L{XQz$Gc!W9;Q(;TWO`Y(rPbPPTK=n zuBK45WjHT*RLh#d`6r^n=aJ;bFXBVn-t#i3*&8Wif;kd6@ zi^(g@6TO`vBBO|d!!#EU( z_<|~Bh43My^KCepf4zRF=;du86+6cUNLN{Lsc!qrmsQ)5{fq)FqT(EO)b#PJ!Yy8G zB34Ru*{cb5v6vaV98sX7Gsw)uN%p2NGCIw*o_)M?IB5E&^2cS?>sP)6KY5%ghQCEI z+a#cZb-#FyG%}!f$yO!e0XuJWNjo2P%mMs2Glp0zH)1yOirCG>1*2zjZ)sk%nc(`S zJoS2Ri!d%m_-4GK;{GOHhL@m$Ol0o-l)J{~J;kVcZxVn-iMExV_yq=BZVxWTT6Y~;ZxEB=% zO&@FngteTo=;C+Fzez1m#zGLVF_EqU0(vlb7s=Y7c&yUrYWs>*Y|x*O?d5|1lgz&P zw(1MV#FoDafDyg?PZf&g5qh=$R@_1BO5K=EhGQLDug&lFel0)3e<~|hkX~qC#W7NN zJ}s=}y4>(m+nP5r^z64?Xs(ym|Tk=f;hX zAnduOeH0u0Nhzk4I&7Q2Z#GQ(N``wnt$3&{)&uD7cgUA|@R!RI^l!!^v7tiQE5`|a z6%cusFMUiV0;$v<5=E>R?g#^_ucPSUwIW5{yC?bNn+Gi7-Bx%Qj^~Q?P#2Umit`T& z(zFdAAyTNPz~zDI3sJx@m+IK6*`liw*mW7hgdhGuD0c-?OsUH|Bb4xu5o{U;vuwKb{W5z6o5 z6kzJm%DM?X*_GL*cna)J)z=cInJk`fO>}6*Y|M zgfdUeMd3f%`vhi1hz?)D;76|s6>S%@@{zh4ZW!45kCcG!wJ z|M^GoJ^m?lS;)3v(f>Dpp-ZBZvk~|!aWxQwrq8tVjPGx+j6-V@h!e0YpOWwR75~@r zz?bi-zF-G0c>mP`o9c(!J52G9_SY3KupgN6W2G&_^| z4BoC{YnTpb<;uK3!99h=Ac%HDC`+r!sS>b?B>>il<>+;L^g#{GF)e?psMJRyeYOV7 zGMjQV9kkI=BxEbKPfOIQo|cwWSB|}Zo?>A!mK|s^s4j&e3(j%CANEw*^ndevRY)T! z&m{n2Mfuw&0dT!YVvUSw!Am2YVc=eT#yNQFMIV@CG6dwl%HcP^U+^&Lpg4i0%Xf`v zn}Ao03{^USp`Qvs8X5Sy2FSy4phl*&B{B)Vxdsqe0w)e8toM8cN_FwAy>?JuQ^SHc zPXef%HNeXmlHZ~3zqXuJY;@YAGs$qxS1i-!QB@?rG3bei{cPRJK`XbRX8g9&g!mBdFnF8FyM#*9!*w2uzs@~e>&=tm_Ufjlz)TkY%s z**PGa_W=p-b^a(S9N(uw(^N3_%p6F>LOEe0N`OJ2a{2DNAMC9-;$WT!ys(6h)pGW= zE2vC|@co3R|4^6YsAAZD(@kSD8A$*;G+o`&iOSUn$hn3L^`Rqn&7GGr+(*J{m4=}e z*I;BRqY@}t6KJa0r`8nM(sFyaE8AV}Ny__+>jGz6RTW z!l<%W{poKwj*dqv}U+2u0!1s(+H;~KI~ry&*=4M=+8ga z`GcT0O>|Q^NRb7lRqF^2|DONZig4zQfTHAYgIC>3KHhIGk)0ngl%e1z%r#*`egn>b z-e zT>7kh)kdIv%bxhcz$8M$yo3mUFd8W%<@*Tqd$>8Tn?2emxV?}tBXqx@#YeLMjYzP3 zi~{xo01W9VvjrodnN1BQDA1JOwoAh%J;;snkd=vv9DWGc%@`%8n0oXeTy;Eg1UO6t z=lmv&+_GXH_P|gIMa;bhSoqs^S?I@apiTdt^rB5J=RML&8ke(GHZm05&J%bBYQ+3k zFPKq2#(>K|cDefpTs=Px$h5A}Z_7G%T>VoRq+x5lcw639%9FVV!(6HZAD9e~#a*M> zekJeI13$ke0yBey|1yJgpDE5gc{K+OzE}|n@QP^DU#ejR_cWEwFY;t-zRH_?mn|CC zC1%>Kl%pkpr*cHkeG*O}>;N`jdPa)~g1poKSSwOo=(zLf0WiX0hByl- zKFVRLk+1H1HYGJ6TY>Uv!x@;G1N#&BKDL zcqGgzpZ{~ptL*UKbX3IGIYrh-;eVqa#$v2_kU6M-tkoT|NnS&lu^d9qO!Lm z8Oh2f96RF}*)yYzN=A0}I<^Xxkr_g$WJFdetB}fy2oc%*9xuAC@8|vbe!lRj9B=iF zk!LhAzr!h#A3k{#DQbRk*1}i2u+oePN60uZJz!*UKmAKAAH^&{OV~dVw*xk&(n1Eh zK5MJUv1Ti^DaQOt3O!q6mZF`?>v+Anzy80ErYb>p3*;Pp^LpehYq8 zH@!2;dHT(Jc(Hb_zy!A<&@g(yLC4j8j~BOU0r+6d>I$HsY0+oud2qILq>Y;!ATB;( ztr3`%l0!suT4}9zBJOExB8o=%-74Om-(|Fl*6C=MQ|(K$xV|{$XK?81+@gX`=Zo(_ zTL+*{*xnB_>oMs!P4*u~db%ndm<1{l3==m)vOPLI^U6`lhiDC%*j{nT3*h!tLqcUa z=*~G4V8zPBQ8d}=81Dq3eD^*otXxN7q&8dMciee!o?WsbvQ1&l{}#e~Ki!90;)0EX zkK~ne`Ealo-og~9ieD_@yoTeiAm{r18`T9!%X>^{WB+-DYiK&P;J^|~UQP?1X{C)P z9!wjWOA_;grFYGsde>axCF6;fu)J`bR4JX;PgP<=tyE5WgE(S&k)wcr+M2h`wYf~x zfNG*@VxSZnK7B0&P+Ysb4+?WVA#ohV=doR_eZ|3e``l1Di@@&B3&xx8DLrvl-%sf2 zl-3J${uo5Rw`9^Grh6UINL>;kzt?UX60InQU_6T79Va%Xv(Mj7?-(YV6CgM~2N1HW zAEpN;C^@KqMSp=Nr8_r?^y8E`13_MlTp=>gPV)M!ZM%SED9;w?QqpgC$eN@k+{fSMZMY?Z<7CW4i0{idKbhByU!IJoSW{kfLiMa88D1mzC2gDf za4CD7c(X=}slRee-=9)b(jKpGdWRsshiI1Yj+%bAB0B1oQQAsNAUOpWxoIFZJo=kgvsa`abKMfyrM& zp@KzE^Z`TnmwKs{EcIalcSkLB50+>u11BVDv1#vK!sHVNX_=8(r=4%*tMA~td*X8C z-Zcwidk$i>jtryf2#rxWxguXk#};cHiq|TZvpm|MphUl4+;y+s;JO9Q}u%kBK`gDD}S zIZ20vP!0>@eO^amTIb=5BtF4+nq_kSm=W_R^=n;e zcFXr>!2!W%s@JYBQcT~DSggAc~iEcdJIGa?*fNNGeonN#OZnu8V^PP}W zl#8kRGmTM^Fl~-47`LWbZHe};qsrA|pDN_h<1<-i@{T+>ifr~m;#FFtYN0@lne)JYMM8%2L?-xPt!15b|CtGsz<- zjL$`E--ni8bJ)&|a1%Jt%+N(qn(pk3sxbp1c)y#0!UhyW$Fv4)80<(hRj+Y~AAecY z_4<4AC9OoTzLGh`u}oC8c%5(3|3P|7rh;Q!#WIZ}@A%zIUSK_18~#OT70467hDD&RN%Q zb*QTrQoryG%2dgNBjsMEk|}iw;RiPSu!`cvbIfUhdLNIhQQA?caaj4_aOWbO-1ucs zD*%HC@n$-P^eg4kD7>e3JY4ZT{$$^mj*{GaR||@UF5-=`YIUKlG!L1&&(&9^wu9@{ zwN23@prixGTq@_nz}#hvpCyjA)rqJLf3XMB%KXo%cItAG{cm;xy$mUx&$2S})$E#$@7E_+U_ zoSHiM2V0X=za+|&p|(r8=dXY$q0F#-wORhD+{TNf)h zD%q$)lW6g(zDn09Lhly-xpt)(Zusdrf(rzfRy2a1X7+;4Uen)DkaWu)Xn;DVlM$^l zYf|@c%>FvCyqbh&8jv%VeE*C!{`ZVMk%*Qt(Ww;kUfrq3#>U-m$)ojfA$dH1N)NRW z67emX_(4=>wo}iu5nwB>xAUrHa_6^IG!PNtRn0X{<|<|g5`^Ul)L0iK!!S}{@DQOmt zN+?w{)IdmuZt`(LQr2l15&JfkK%B82)da>_!=wzZ{Tl~`o^Ss)3XP9|@zi6tuOqpR zO`q|0=Z#cTxHS1OUkg6I?U3ip4+JTqCvqRI(5i9%_--<{1g>s|z7Fch?OBXY4U_bP z82*{l&mBRG&Qxc4Si%;{nK8$HP7i6--EFJ$D?@+WFk>brCp?Ouv!RML5q?@y)A`iT zmBHbbb&f02mTtgxqQBMX-w!fMI>+47DUVbhnT{&FTdrGt#GpN}>eBv=l#c`$kI|E* z`^cCL3D1XDO@*zNHn~45D6Djt9hjYIbl-GLLUSz?L_an~mvo=`;;VnUes#Ht#%h)9 z-{6nT$T?M#(-KZ`zGLR&48hzt*ne_V?d+(Z&$I2)JXvjdjQg56Zd%3T^jgxq0yZ2qC&C>}<2p*eHxSoI}3Eqv$Cv1XpOz_B$%26A7EXx~{F zeQrcfxxz<_{BE4${%J(Kzq=XPuFzv}36*DduVO-G*ptRd7Oqn z|M+wA`uY1jUij&wm$-(6NBIsQoMb_S@9{$p;K%l~gsokv>PzGJ_65A-LUa8pZCW)k z!E!dk25lRl6FIV^9fjaUI5O@iBSAb5y51f(h`amCefQO9# z{7d9#m3N>er2qfx3(PZ@Cf;;CROVD0xzrAtApW~<^-fVDc>1^5vR^TU>Dw_WoTe@n zVg1EMPfGf>JF)mo!MnRj`lC5{H2Q_(AMXsRv&iAsft%Mw;N-%G-dxu{oZf%_Wdtc( zIBl@cjC8yKE={gGz~wPb?5&HWCe^7v^k&Rw%HB^v*K!eI(ZGNbtGPVgonbSGb;#%h zTa2v7wx2#Iz+UP|LC++~GYcz>K zdhq-MBKQC(I%$m_ARg?v@aGeI(PNEK5c{0bmfi8{{f*czjB8vnSd~Uxo@(~~7UoUA z>1@HfJLa2sWHop9IE8(${@`5jaSrmiMZk3!ig(6Z!n-1<*mGf=u&~EudwU)qsQs~! z?-4KR_+HLDVCQ<@0(h4>ced8fE3E-A6+K|ouLi#SEI+t^_LdlnFr2%h-_IMjfb4yx zlg)@KO=_xWe-Xh7|GmGys1H^+Rt^TEnq0;I7+5M&hiHap-FMGFF(a8-Htw_Q@O`3M zeOeN`Iyf)F;5ImCuOP?J4M-N>OP^JbHiImb*Kn27G6G-$E^5~$@XTv7PS5g|KU`ZT zfe6L_?va(9r5WHo*b^mI$nw1!aZqjSSaQr8Cm-wOqpA!`O_m{YM;)dgsmInzlQpU`qT$lxV~qr13#O)O8j(rIa-f zPANeWN8QAd^tC4;7v-z3=;5B1J$j<5%!TrTuUa%nWk9`b4xUF?CgYDuFKf=%fW4PU ztWIyOyG;|tGZ5s}Fgz9DYf7>#EC=}Q^6X%2c)=5*xe=7$&!R4j3Q^wGokVr>OZ=YFSl5h8;}y8uu{ujd=nBC?h zROjQ!@5vZk7P@J7au1U zxz5}`sV9j*xO$INjw7gRbL)3;dKAsgKm>1Cc{ULzrQVZu!DjkY?5V1QDyD<#Re?{J zEMx!E{fDzRMJ21c`*9f;>>wfnl<<(cDuU5SQ^%5{ z^lCy&ZrO)_y$J1c9cKS#7Wx%`MDDG~6Z}sfkpN+5AWIx&J52j*57^tX_$@e^CqD13 z`s8)*eO=%ruWao=m`FFxHUI)H?dN<{g*a$}p_O;_EppqhzEI0zkXoj5a5!=1AjANk z(@(~^$&^_~>O?PXVkYq%>!41sHz~pSBjE{QyW9&wTbPqBo-$X>;4nidc2`z)aeSqzL zWtRPqKT$)%Q<%b%2!%$(Mk74%3jpRGfO#?Ose44>lV#NXh#$M&m99bEB002VVVGNbt0oKzyj3H`k-R>Gm%@L_?}A^{ zakya;kDY{(+vm1Ab^(Nx{Hn|mk%Gv zKZc#nKXbW0-M^$9Cb^4DOqpDxV7Wl^QPqFjti}1`-Kfp%zst4_DMGAB4>g{5z@x`z zO{>Mu-z0JJ^u;lulKE@F4LJ26oGFSUXN>=Kz5079ne5c{upSa7xX1TbXb*El*aE%(dg)Ky5Yi{&L_uiL}~MW&8C8IZVV#a}NqZ4)Np#+k`gu}agN=%)P`_kXFvb8NIV%Q5G{_}bsLgyode@3-g zoX*%5+`l0_ibRTO-K^>6<>6KyHC$AwDM5*%Q&&=e1TIqh6@58NXyBHv9aJtn(*++T z+LT^i0s*3MCO9z;7*5(aq?Xei)N;z13d^S8QW7ptOUy zL*6-XqSse~U_D=&+jwky&T8M>P>-~PYSc(-Vq->=!5sS;bR=~xa)s`;R%yp zSeZSYRB0hI(m_|g)y*&8!?0z1{-A5pGc$9k=f_}@LFTUt#W`0#U;07U~T?G%Sjf|e&09GGYeJShXMS1`Ro|k`iF-8IrDz$i@Edw^t zi4}Y~Srq^bYbP*!-)8=HF$f2uY`toDpa^=3@`C!53jS-A8Y12ypexzBI`x)=!Hxev zbFue>TeD+Q^C&2&oqBPz6tz`>Nt$v?0^7L8DK*WQQxAMml4xc3WGP;<2T>m!X+P(GA_3hg#{(KDxn7;Ry zx1FBR{qMBx@;x&%=F=2FZorh}sdgb$3g{mbP*(jH(YjukJ&)D-{ z5}+yU4myS9Ba|qHdFqAB@P#23of?hcTjImu-Y$;z@UQ+rC!H><9qR0of62*^le}p zke0m;=w6~=##E4-oVXcSE^~i^g#fvW*n&(It3O@O5)ZeshKgeio3q7j^Nm@SBr|}Q z3tl{ZJ=x%7FDVIl-S65#E=VOz5+|8_r+(&1yo>cq$!9OVVxV^k_?*pS)OB@06K9>zFZ>KOX**aYay2O-weunz!8WQ> zz{m(BXz_OtKNbi8_9V1$3UVk&CkIUEJ#YEPD3d&X$-a+3`zgUb@HP5dFQ^GF|LLNr z+@9vu`*iJeVaQo>184@w9B0StXf8rUWH6rYRAkf)bY&sd=28G8v*=-fpA!0fUGpcJTEUIrw7mlG! ztv^R(h!q(`_Sp8mI&s3LsWJ`|}Yq=H<{Z=UaawG5R)NJtQ1;E??b~wZVhuq*ImV7wchJcf8 z2kwJn^Z#(Z_9i$w0=rD+HNuCZAb9T3OWd?GmSa_@MYAAoAMhM~QTjZ+yg4%x9;mR5 zNdFZ(kAOW^sBSv|MiLV|25MT5Kah*t8javO4u z)iz*DX|iI>HaFuSmz>Gb^C2f@c}h2raK8!TNPfY!>_*MzPUyFtF++boxgkLt2ArEq<^cI&Ko0%vE9SKDh3vYp7#2^!?;p z+VrGXFD6cL^4=~oNRd2zM?K}poVQh4ta=AAk0G;p4H^9znuwV})2sI@p92HNb`9xN zZm`JX*^As2baC_FR&5sM7)3?o;G~?+?>q|85B*k|Ddr0!<;$X#=9>b zp_AcHGxLb_`_*)m>({aKhcQ{I34sd2togZ9!3k(TF~IU|I62?amJ#EW9&wx|l!R%v zb-$X)-g?#!+22)zi&v~NHUIaS507Fw*PyGTZ9A3B!W!yg0mO0eK&G5jyHL;h2`J}R z8#eOIt`8X8xdw=Sg907-yYOUdTA9fN#Yt%4kKZtg`jtOoQFvzsX@J#Pb5K<@r@q71 z05=6fobBMHlQ{eC3E#}pm(36F|7@2RKi0d*)jlr&F`|SA-@Nye@4B|+N3!QG`lQr4 z`RFC5*Lz9Zc!zuLD%M33|M0?=!Eug9d+iHuT&ljSX3R%O+7b9dz@ov7$?umu$#jQ? zvK%Yxw_s&*1*Nmp__?`9+E}^B!Nrkhf_xXnK3N`y0GS)SJNG0!V^WeVOW=NZf}iEm zaw^XAD$7jM4=1b~0QUY#x1)I7H$!t-5gJ)dlPEu&`F5=tTwU`vtB!(%L}>%)(Iku8 z8?Cu7n>E?Qr?hHN!_5yFc5_J3I%V+{h<%8woLs^63Fp0qXx=qY5RBkjVVN4*>^z&O z>7ia#yLhC`&~NMM>h)r1<31n_uls>8sKc4Co;2~w-p5N<=4+NYUF9=n{c>phFKFd1 zN$Twl`<6&fn_}f2Ns@0VtK7G_4n)?a9AF7cDq@I!D-4TOzN`)nx=~?bj6UM-1A8d; z>KrITCN$(dZwnKWZrBdfKWz3AdHv@5leep@LRwh4A#JW&?N74fO`eU@NN5=Awe@C? zx0KEi%t6*;lBrcgVh@Fx5S0O8-O;3L3r41bX9%W@2``3ary8M$HQNN7gf-<*DQMj7YMQ=2aLi{s?m__(d+>ao4Z zY#SWLNihI%X%#O0l1LR@{%QFj249P!nd5U!C_MC#fzyvzE;BL5;DRc#@g$+My-s?w zgZk-*e$c^WviSvr9ZTDW_Sx;1O_D!t=I;MM?c ztfY^qDz}c_*z=zSi44^9#}q5qpRU>dP~`tDHh6NSmPWsrNs|41cxs>msSA_N_U11K z4&sm>n!(agm@AVHM;-9cPseGFUw}?ht;0h9;`)}AJC@Tbpn-)TtnqBAwEOt$(36Mw z88}Tzd(rQ&1>kg>enL>3C&r_$L8i?fw8Km~B|hugm8bZE12`7wb(v441};|+ez5J7 z!H9Vh`goKaDd?WBgN^bUigy5A3I2lbpQ-_@t2<}8yy{?f8g+0eB^IOf6w~xI*@3X> zYk&SA>EOh~&mP%5QD(_nGu+aTp22cX%3kofUw(jXqOTK0SGqggi3Kth73AbL;hh8G&lzNRh7)~L=$`z-_1RsNb+ zo{;gBEXU!>pw_gnf_!x|LLo=W~@RVk%LawV=PeO z%_v|1M^46tSd%=C4W>vP@=twf*ZB(a)!TY{XG2D6QC5i*1r7+dEt-TO(gOLvz8afzlsYP*OOM3sQ8&++VkvCd@3D{T)w9w^tTOxiWJ9f^W@I*JQduHBOIii8a*ko0)+%FL(P4v=wn2WBE%F zdw!eIjw%LlfujT(+mSc{ulN^OP?d{L!=&EY@rmxX;4xT}(zwF>LQ=e$3~T|=5{P#7 zbN3BiWV)4WcCCp>%@>wq;pbu_!6f2)yjt57kMbpwZs6_Zg$dO~5@@Bu)UP~-{O;5% zqv3(Qa?lO!3bW?antWR%iL}9bZ9%83`m}9X)8|o6va+1oXDufEV6R`Sd2e|lv2yNp zjjPsh{+<8GFffQf5f2A>Tb`VdHGCaTd4!(6@i^;!gL=PBk;4Of2yMfO-1xoWZU*j7 zAmcBey%JjDJ;#}7axV8BZAh;AqZz+Q^T2##URnaq58|Q0wAUW0nv@sUqLODk=d?Q+ zXK^E)SUoD8GSFghym?bVB`bfDv&Y+y#1Y=MJ1GB4-uvlL{!oiETJ|4bQ!_jieCwJ> zEg*@uzu%rOILU5DrIWuv@}=oxYJ9Y9@sU=}oS2X$%Clm?E$Hz+_?hnVPESuj$eh0+ z^u5XDOGGk5GQp-_cY|H`>C;-Idp`Y>6(PA`J%lay35*9})c5-g3+6%OlitCfz9a-v?!b?4wYb8^{(9mmPqY4`;7QO8@D;ib5#PQejhr*s-iEe#w-u z^EO|Qs)_S=gxNO~8aIa?;jPx$6O*K`upU|XJEY@BgQ`(9CB*C22CSHllEXbw#>8|T zzxw^X%~Au={j_ERk^L%^?{a<-gfgGmt(Jb2n>n5_IW)E_e5NgGPEkjgH5By2LLUia z%(#2FcpLJy?qBf;Mc-o9nom{>XmX!x_`f?)XF^7m+|YQs@~H0Hqj@TC-i`H=O4OkG zZ;;moZZF~A6y4|+dXsFzKAJ`UB_H-2_MLLCv{h^H42nokUR0#-NroyEOOw+j*_6Z> z$MrkG@?5B7q3Q9>8Scx3j4N9lZxgEz^%?45hLjwVYL8xT@~pE!ogVu=l!r~T)SYbL z%o%G&oGam{%1b2T2TtiZhVkA`eLXouhRqL6aBiibIiH;K>p6>Lwq-q7`M9Hm=LJ6` zEFc&)FCZeR!7Zl_u4$9(1jh+=t1KI61kz0_e|{$|?9Fuwo7y@S=cGBzy>uanL&U!O z>>vi+p=b}t#Z#{1eZH6tFaOj){6pdZEas(#+DM+nOZh0{L<(BMuo?PghtVU}hT2=A zWyi@dWR$<8@nvMuJi5z#2>5goL1V=KqA^l{^C|Q55<0UG0#Md@xc&&aX*dGXISV29 z+}#5M3DD%a1x>uA|Ai(GDAgzFu9*DxMuk#Y|E$J6nUzz@Il{nBR0)5!d#R#q`BtH^ zVe7iU`oNmAh5zv6%1tky}*PP#-N{d)?;72Hqzt(B;Y^gs!PMqX<3-(HHqZE{TPfyJah zQrppTCTs`XPUlGko^D3q>HkFrhX1DtN+-$^ZE1WapUTn?kF01{G4P08Da#QZ5Z zOtpN5MS7&!frv-~s<}gK#3gCvg`Z$LROn+T&dN2ck4Lv-N8O&!PeRWag)u#u3?h@K z*J7djX>b8f*|{YF8@u$^*`PT1XG>@H;o$oa#DxPhNnEnh9x6kr7} zfyv_h1eYkdEi;7eqQ0TM+87*iNB?B%Tec|ZeJ0_e zme3Y^vJ2iQKUhsXho{53MJI>(oVUn~NF3d=UO<5B-NH2>ztX=dKq#qapL?9I@kjuL z#2xJOVmahI_;zp}{B^%yldqkx8PV|7s1Rwr8(&%T>RL+R_wR+$Fqpv(Vq$s=w3#J< zb@l9XB3h}e*<<26Bs^akyw4mSEUKh6D9Ea*yQ0cb-?z`SdhVq*-_gu1-?*b!{o{z9 zPIV@N4B0MywF*CN`|Dd%#oaS!&ZGhcJ96(USQ2DlZ=-dZnMoPL|)W7ilAlT4HnvcSNpzlWFUc#IoTfA!6IBJMXx)hr>2atq?9Zc?N6Bvis zj1;hTu#6p!%96_fRb!@D%g2+_ZJlq$FO-g#MSK2j6tEW~SnYbz@(a}Ad=@s8E+-ks?^|Pd zk{keT+ZF}IRVxX;UG#Y`f0Sq-?+?RC-MNG%o(Bt%#`B#XE`9Z*9|WX=UR=pkn=m#@eEiG0yqc)V`0U=U|U7rv#qax?Y5VAwh{#UCNAN3C&{j zd7XFes()a9rS@SZJJ);giQXqGsY2gbBJ*0iN9fm6Fw^I}=F)g8DWg%aAf5RqBQy7~ zZAhk7@L^PCDRgd&JAIc0u;B`CI6B!Qb;>PN$!(AJ)&X$KkSz_?)bo%UQW25>Td{v7 zgcjgUlVB_Xo$e$Yyyqu~Ywo-30jQLsNG`#lEBzO-I^NMN`4MaYO}%6fPC>XLt9Ce( z&to%>4$er)8{zek%z2}u)WR*oYU|JZTk$4Tv;YUxdF$gphn^OYL`|5q@5&7`mvrvO zf^huGod*Y0_so7M$1&HvCIODcbelM#)HY;v6d+t#JX$yJ$rDB?|AE^t^)O5EA!afh zcg65v*=17%Z4&vT_1FEpYWF$V1N4U0yhCmtcbVEUhg+mJ#HlC=UC~B81FU z?oK;vxBtYhonrYU;`{gGk&n1lmXzo;Vv!J-|J!ePv*BafnXHU$rW3_I;{Ll@I5V$e z;y?tymOx6ycwUDQVZG&KNTu}(Kil;y*wNx}b*uaJMGt&1rQKyk5MWWx$ivE z%-AY)X&f<8*oH3Y9Yr7Eo#6ESpiH09)u>M5q{!kQw? z&hZ4>5uuQF)MeU-esc3WA)$R-wc%5cKPjxl_*48%z504gA6jR#F?a{ygOd+6?Foj% zjs>4|^`vO(Cr!PYML{e*I1AOcC&9z?U8-k%Tg|57<8(;D;vy>q(rn+4KpCf`&>>7m zsnI_lI;hE6K~3(%R8@TA6{kM#IZM#s-kJ4a+3^VW80DTC zhi9px=+7Zx!k8Z~u2q!vwjo?h{_Pf5_n4_pw5{_6dr3wtW>79a@e%sVMJk<=ry2!{ zkAKBi1zZc+QK8c5WXgGWenB>}x|_yXI}>RhFrg)Yeh*6J zWsN!kDaiGl1R+fJ($X*6Do$dp`74d~>$FJH-0!BoxHMPESK%6MKeleNi5reS`Aq!jRXDhjoU{TzA!#nM z`)MxO|5uueT?1N&H}ZD&-nV(Zm0RCf-Fk6F3!ecP7(A2EUCF zPaqFYiwL}10yl!imCjR_B?UhNEo+G5JyJ|z_=Lym%GV>T^0hUvYpBhLbYDkp06U{% zAkrjfrud$avC4kTlz|gqrG^K%%T(>?#4$tSezs5C8pHG97wadEp>?(`msXEOzYKpN z%F<_8jsmvVqY&OLve-IfwJEW}5bqD&Gq*N?Z%`Va0MPoVF$?JRy z=`n%5VunVl3fG2D>fJG*?HUCafH5CS`^|fRv!aref7onH`TU}ql3~l8uh^~bFeB=Y ze6aWP-0!9e@Uw)fW0}WQ&>S!Fup+X}u0eive$p(pew379>oVDJ07Vxt{4Cn*-MFwG zmsBRaAw_lS$%2tN(u%H`ACMh>>UVJXDN2HPB1)_! zuJ_j1FppobWBDg#lDW>2$G5N#BeU984~^dhLj9tFh)=LtFrCh_rf_V}a>2TeO5|$k zv8{fOGjtZg_xFu0L#VE^T$o_Guaeinv7oyH}!E9)U2y^cQof z>e$U-K|c9wP0|nk{nno!eCvJitqaZFp4w+nzy4)V$q1^y(SWTs`iqZN>MQBW*K8)3 z0dgs=EA#&80`E2k@l+*OQGKXLi=rmmP3wx#BpH^NZFX^zuVTGNi1JG4rC;Ci%SSy* zpzhUDJ33O1I;Yji6nrn;n#+!g?m15d)wkp^*=S~gTxyTVfJs0RXY^a%LVAo-I;Kv; zeysH-KKUYU%!TQ_<-`n09P8$(Gy-DLkCEB}u8J-p<5KT5hUbE?x|pc9If~oSa{Ig0y1}7xPc1IXSeU#+n3EtF)B9bF=5Hmk5_?pV5jC^rw0oe+IMv zVJN(Cr*6ENTndN4)Rn8Ky%kq0S0=6Q96dG3jWFCVKdWhM#1XN^iZ&sjuxu;-_JHX&al_ zq=8fx9HnUcp&D+^U3 z^fIF@*BEc6q`7;O`gG|1-;IlT%2$jZwN)u*}f$>a*tkYZ8UNQu6# z^67-R`0LHA^0*Jdgd}X8C%f*YxV*%<@bO?`aa@mHH+*Zci;2!*_mhc~7Q~h_R;=*M zFA>%>C(9~{r$0#+##rOdR7A<&E;-v8e@>9k`B1H8^)Z!55lxDvV3(m|hj7+QB6iVo zT-T15bI_bl{EBmBH4{Ti&=Q2rDCDsG;ZDMhE!_e`Zv4GM`5;GX%FtD5H;*mLoo_NqbX{CZCtyn2%jSc|*k4`` zzMiQ%u$uXV>XzK$7LA|6DbZn900V2=ge#Af;xg{J)Cgf=$aJQpj)KQSKZW_a8_`{aAH#@_V@=Gg zG%n?92pQ_M5ee~YFP(PCw`nel2uo`e!gPNgdF-@kDf`(I)3@HbEG_0d*bN1&-{BIt zp_p1ftzWQAymQKP@zHkl(^Wrv4}TeNlkVOfIApa(3fyRe_L-2xe`Oi7MCzP{;BXhr z7;t`QxJ060Y4NKg_)75fYy(?@Giqg{``q}jh26dr^VvUW7iZ_WAsR;B;Gc@=ZrnJL zcAGSf^2b&L#DZiQKm7(Ajt0T-j&@XsB~j}d-gc!!34UdQ?oMW4piH)N^X2zKll&mY zd?K$}yjYHYKY+8Xav*UmQXvPY(`(`A!gtYp?A|O|UM1-FJS&w2Ez=a)>V)Sb9&-{h z$!f6udVX^;tCHQnsUY+s8UG0ae;NMuBaUmg4*c~8W&uj$x&uL`pQarv)_~#FOHgB$ zV6}EtQkLZ#%dl<$uV)Z@pdY7kZUzgIu?jpev5O@OSqEdwWiyWEFi0QRF>O7f{UVdw8pP5`y3RHfZ*DM%b~ zwaxfz!AsgV*q+{JeHpQGx8yhR8c*Vk42Hq8VfW?5t(43_7!9;bBFxyfjA#Hb-VtCQ zkt~cyuFZ(Hurno43-pZZayW>bL7?hNU_(0r$+rJ&0`wpTjtD9<+&hT(><<~x+y5d4 z_wm{DAiVo0pOwLg)I=`BBmfC+@mZbKdXDI}q*vZ6ssQ*J#GS`RkE#j)qwDNTFw1y= zEkor?OL9oR!ojaQ_)0JS$FD={Fd_s3f^ld)M~G^qmj9pMwgMNVRIqtrvt|4z0qoM2 zU=jdgoYvtlwIJ-iDDmxi3d++eAueHc&i)!O4Q~8}J@E%=-K}t!7v7`>-uR1AiCpgz^-B;%l3}<4$-1UL zRoJkT%s}Q%sM987P;<4J>F8LNxFZ-RTm6?!eD5G29JyD&HY@|!k}io1Wk=#Z*0Jal zM8>Y4${!%3YG6(-yGU!dzDQv$lkZO<*79T7V=%Ox?E`n{P4H|b2H66cm~eY%lOdp8 zDGYxf_?=EfZF=;ymyXW;Piv(PC)|oa6aY|)zI(q6_ zU|oDdBgEl;!ZB&fY}hJ_HDCJmk1CIF>@%!>A}kkgAPd>#jSGKedFSRKhjJeA+1|m( zFRRWY8tqP@H>cPU`xso#FO}c83;?PJ2whSEQqsu3Tk%3(Rf5?ghKM|x*Z6pOgb4%W zsGGsGBf_Po&O3Ir9%Sx}2>2?$B5xrNA;vE3^e8Vt^0}I`wupj48W+Jp+GHiZB~O@n zCQI~)7&0&kW6|(=1<7*uWUgJq%r;;*F3X3|L_L$`%&)1;@1nhhb){P&Jp_NG3j_6Q!EG>*!I176AJ@tM5 z(l_XN(R5HoVFvl{#i6@<`bGxRldiH2a`^Vzf?{szt$@9?fbXASZ&I5ly`@IBNZ|qm z^S`yPHZGi#-P?!<^5h~UR0%=|$u+}SjRHI%%NnULy`bgJ@gx{{kbg<^NA=w9`enmo zFAQy`u5^sr85LePH|i)fWH+}TN>bzq7)N!ut_9$4?p}BISDSwU@TNzf=J^i9$_W`E zu&{0^4?nvqsCeg?(B*ZQdN);6T!s%JmsEx2N59WS0@j>{prZHoAP=Z}1NLkeG6(uk z#`j5xgyKX>fqs#`nmNpsgA(D2T z20m^X$s^MY6b3y0$LRBCF4Y5udev79Hh`_ngQ4&qhzzblBTL#CQII2J z2JS(@=`A%q|ES<9=s53e13}dLK=CMIl;ypu)wa6@;m)~m;Ni2g1(75$B*Tp%<>~6M zz;&n|TT5Hzn=V(mHPS8HJbm>=?62H+hKcfBQ9nHT1Dm{_zt_&*&`$#xD9J%MyE06 zItVqKW5#0nRlqJt(D;mjUSpfLz3n9lbvbr-HB;j=B#!b8n7R$pMA_Yh #xi?g@M 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 E4^0B5SO5S3 diff --git a/pictures/settings.png b/pictures/settings.png index 201ba895a2358abd12c3b9f9c3bbdd9a55e0ba0e..b0a07e74de8d5ee07d9910d04cb7ee463e7c0500 100644 GIT binary patch literal 79520 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 F{2x4d`^5kN diff --git a/pictures/system.png b/pictures/system.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd873d5c16347a4889830ad2f6b24bb954c19c3 GIT binary patch literal 82721 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 KrwON!k^ceAq&ims literal 0 HcmV?d00001 diff --git a/pictures/update.png b/pictures/update.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf3a5c0776dc5d7f6e89ebfe78a6e8d7550c973 GIT binary patch literal 96885 zcmdqHWmH|u(l!bNf?II6;0Y|;-QC?GxVyW1aCi4$!7aGEI|LR4cMEVA*=N7++55Zy z?vHPbyT+Jn_H3=Ls_v?Ky2IsV#Sr0e;lRMa5GBNg6~VyX0l>f@bYb3uaxDF~g2BKL ztjvXk+EuppviRoV^DknZ| z%@b_ucXyKbrNU=0xW3?-zH|M7gKLEMWoY{R1U?7dUq=%p)Gsck!A7>8&n{2j^P}HY z$ih|oPQ0p3Z^M7#2K!ozVtQfR4iOgn&QI;?7g&pyh4^l#<0S{r|`k;!Q_Vaget?l zg#~(qp{j$HkXEFKLoUEf7F;tqe0L{tcYqF#A>SBlz!l(8hd(~7mA#spzciu$9EJ8? z>K4F|B>RBz(2KhaM8POK3h@Z~n#5(> zQ7E67HH2L{lL)VB#?(0S2RlmddVnk{hC@6FtDl=cKW2Ji-7-~HYUyP#>ldlzPf0KM zYMfhY+eiM~^ua|tzGUcj%D+=ZYXKaHhH!nVBKdRbVJyTh$$R7?WmcjX@XNJ&l9I)-GrNE4~W;YiD}|qP>c}{{C*phYku+8gI{~^;IY%w z%=aa9teMvaGSd$EAT$_Sa57tdRJFgV6mA##w9EK>y(X`YtnI79CBOk?`E)P|7YR38 z=u?EIuO5+crH0Ur3G(>wgPdobn}>74n*#FhV5_lN{j&PN+Fo@sef`026qOiU`Q1Wo zN5kExxYx<-C~|~9QJ;H>)b^AVB+{g^q*6vr_q6l$CG&Q+YAGd)B}F)X2)>8sC4fYT zNdilwEgd1ozV_I1a#4V- z`~u758cL9gOytzIC+YTum2sOv@TdL;=>i~P+k*Pdj{*Y~M~w6_& zP?`F0?Sadil_gs4YoZoDY$z=Nu+26SaaIr(k^|;@E z^rGm5(TlVl#5-5ISNTn{5$H=k1v3CC7C`SWge@~fB2AI_fd)nk78<5xTjSTqcCruQ zkHT8{Y}}EDecC(BJES|DJ2pG^hFlj6wJE}+IPv%rFNN$MQk2DM$g4-wml>Ca&r8nH%(;{jsI=wZN>{~JihQSdir*dbx>UaWaEa-_^zfl2VNGnh zcuDa$^>Cv02)-nFQMN<6L+quhj?TK^x)_guP9d*WhoX1vBgakXFQPI|WoViV&SaVr zx?-CG!jg^R&Z22E)&^qD_f=oNr>aVENqF)<wW^{{78V8 zB~Q>f!JReEN$E^D%g{=mB?FuW&NNNQ&2l-1w|;NMU)NrDSl4N_Zsqad^dR&o^H91j zzm7R@J}`P@eZ+tEdM1B-y0$&=#Wi7!Vvz<|ZGU?-Pz&i`!?r>BLJXi{TC%oV-%23q z1p)8i0h!X~uiF=-w82Mp>_UZUi?=mmpoOWZ%S zZ90eB$J-}=ERgo+_Zc?zdrL)-&oZt$6d6Yv$0ntzM9n)@a8__Fe6cKUobqVA(Kxze z{myF6dS#7koxO^?ZmwAL}VebRjnq5!#Xlb>>Wd5OF`yx_g>9$pTCKU08By=M

bEv==lVd=umuA_vb$C=eDFp^j;vVDw|# z-hzWCZX=F~R8B;pAU=OVlqbR^ELoIoFqa{Yf!6S}Uvn_R2yd4kpVCHT?b&VhUg9G3 zLm2D@tO~3gnhshCWwuN{rHuGW+%+8sySv2YI(i$ryQEaP$*-lkmAN}}67$hnPSIF= z9;54irvfJh52g3iWGqIOqGzd73>5=TF*o>HoVNq)tM*C*SwyzXyuQEVVAIi>(QZvY zFwQc%e(~8Ku(xdP(8#R(RY^#g(Ug7{Pt>P3eD>iUJ{dmS_{o%h(kFX2r=GM#3Y)4D z#U*knzcGKY1+@jwVH4QDXFYl}DL1;QldJkw!%n`EYyvGO-Hg+Iq|YV1pip^+Vc2!1 zT!LqY>QEJj6pzx9W-gfirpkfqLGChC1YAT#govUsNIA3&zJ!++iT1@9 zmp7WN%DDC6nq!t|LVtXT87(c1rQSGsuhPAq(=>E)gEy3s(ssg@oQ`}{>LopcwaGnu zxPAGG@D=?P=eg(6YUc3I>5~u4}utmyU zeCc0~TupZStkIR&tlWM*P}gm|nqo;$ulwRAG8Pe%6qRI5`>M%eF#iA-8-Z9sU9nfe zMN>eVv7lb1(Yk-7xxI3v(xcK=5nX|$+NC$B=W6Ud_4tTLfj7eDwL-PxW~p>v9DiGE|QUBBeCvqi?vVRs1^M^+4i|kroGC@bLUp6aig)3E6Vj#nb6TsXC1D=)An}S zFKS91O3%gXk8PuOems{v^tUFb9kuipdZRx3FOPavzE!;ZeDVu^%+l5e=IE?0%tdUC zL{Z#JGslZwTVJp8tV73<)d;4!>V8t~9kdrb4@Sh^5T@Xt@y0ps*pCJ!w^54aw7bx3 zE3Y1w&H^WbvN+t6oo|;oUL8XxpR)Pf{N3{|@)!F5a%j7je9d2QZ*Fvb1$?`LX!nrX;q>itmzTlXm*0bZ zCII6+UZpZh?AY=n9(i#F^M4IWdfxGK1D8kM+(c{LULBVKyS4H^!TPxv)M3Gm==X)l zueA*sF=?o7eLYcId8q`2@cOPRm-}`p$P5AuzaO*S@w6S_KC676DJp zdzfYj;#D;9`OuZ)#SJVZb24alxQK zDR9uk3y$|cX;E-0uy=p*A;7>w&A}l5Q%4r`e*1j|J#TIPdcTVg0fPp8eE>afxe$NX zeh0{X_jejX7gPo&pd=(A0eUMLIT#z;IGWiyY1kolf-+$3#5Ekjz%a?*9&ic8kLRHN z7tEE_oz!KdIgMEM)6oOw39LpaYQd!Vwb_b31%7;ZzhB{ZDhy7Z0hKlan1MJ-w@| zE1fG7ovni@Jp%^^2R(q1o{{l0sK#eUcN-@Ix6d|?WPf$?cR#|$jz$jVc24HDHpFlJ z8W`F-JMoZ`z76z0zrW}-b~FFqk!&3QGcC{r>EBA|8R!7?|I;_9Dfe40r@XnFv6Y6f zxiyGqpfPw^0j%7A>i-`l|2yJ;wN(G#mh24wX!&0y|8A+`XzUL44+gE#08Qg59RJRlN+d8%B&-?tDMKapM)APvTsJdxG z%l1&sbwx2xJkGEuqODB|289InVV`f*YJVs@lZOK+>;`m?U$3v{;(E$RdYEj#k`?z_ zi4xrDhD-%R(}$4ug9U(7{Q01Qh7?rqP7GAs`Na62tiQ{NVZZrpZ{8~;60?iz|dxROmo1k=dB$A-u5g#JIsVS@xwlaap@^>1pr zAwtgnMPN7N2qHKpV6V88z2Lv5^oIlx>7M^P%m2HiZ#DX*J&G{T8vZxqK_qQ`A_E+h zXEHkXf6^aOwzo6+CpY+)NxLD6t&*UDA^(yAI5LP!ZhpNA|DJW?XOIv^RNd`t{@E26 z+Bv@;R1`Eje*eFu@P7<4g6&^0m|yk{5JW@1CvPThfHO*98u~_n-7Ts8eI9*p$-M zE4QgqARcryelm`|`te3OJ1s~nIcOuZ=+j{{c_5RkDkW$a7rtU;rlty!g;u+^+&@F_ znvFy;xA4%E`_U1!j2IL7+NihX(R|ibRin@-c!b4Wv#r;QpB#$H4-DO*`WQsjvLexB zI8IMVBS0D&J20ikG<%?|Te_;O*|a2gqIu$o2Rs^xw@YJf13y7EgeRdpMUTdTF1v^@b_a~AJ9`oqMeHayA^AWF`ph<2ZG(X$OG{e`1AwDt z`?490l8l2$odEOFSAN;3}MdZ8Ax$ubdg zy>3t_?!{pD1k;CiA-7iPl-lj|!@Rmz6W6bV-H~vekwqF>9?8R|&|ZmmD8k0~;b%yMofMVu{W8 z#~=kml|Z9lWxL9)DV*by^lm+yVr!`+!Wx{+T;+#D0S*E3!dsn|B+L*ns8I$S40LS1nz1U(@STd4QGuMcWUv#YA5 zcC8o$S(L&2va&(g=r&nuzrGx|wY>dx#XKNeuY-K9EsfVs~0LR;tdF;#bO>zquM$%xSB z+0*B_md3LadAKtMd;U5;7I*Jrk>*g`xl}UllX_dz{2Iidb^Iw20tm9S{(h+Ep??1N z{349Xb7*bO8?uN>j0d^cQM|^YMoRL`sD$OME&!S$0Cf7j8X6~^^Z<&!#X{2{>n!)s zNc3fR0_sk4v55#@qff|z@v;DlI7}-}@&|z3mFIzc`;Zt+555E}{?BFinSLsgT+Z+7 zGStq|s=wcb8U{-l*&~Wx&goq<&ZAz{5+76-#VtGtEh-BBrp7V7Bf5NVkT1BItyShj zFqjRAQ39V;P2dV!n`(R8y+j=vZ>Qki2mZ84!In2BU9ecGn}zUe z-MYm5woxcGa6Emn8=WCA=v`p?k5AHA01#iKQRHREaf#wLCVeoBLKDTU7cJ-;ZS46^ z>%CMEHEWBDwPVAFv5XsJQ=4&$V;lo z8szD;OtSVusKRF~^}KMBw0HKAVQ}ohbU!tXgH0q#uk>S+(Wf6RfozFhTWpjF|o z`L#B(Y(QBVH3WcCTG8-3wSJT~s=F4Fg>ReooV~gSt-cez1xhAXjJgq=Y7(J`%iJ>r z)(j9y_l#8kTMeD!`BTnbqgk}wUeuKQnlDekci1;Gb8F3}X>7Hijk2p?AS>Y+>GU}t zXqq(a{&3X#tx9OIv0(NUahn=Bk`sS+f`J@G?>r zh31Iwb^3>uIbVsKLQTj>Jr{Vvom(!(3-@$-w$p&JH~~-&{M~G+t*?#s?UH`G1d9Q0 zaVXU5977i3TulavN8If16;g2~h1I$uSQ=v(juI!jh zwW=yvDYb?8!Fja3sWWK~{VCr4c?Iz5GOor|YYsI;Upx$IU6Au9uL=`XYGaCwBPl26 z8g2}}8xX|yW`*Kl+{pB=BZ%Mc>Cw<6xB7)gj~Bp));OE5Z*ss`TN7Ic*C=kXP*eatLfz_Vb_|4K(f+kcNUej_`Y@@RL1`%ttzg^p#YGhf0an}A z$AfxW>5I|XR8b`}P-6!QwEfs0#T;u`jw&Q5;n}~rR7vAbc~(fj>u`a8p-yjCCP#3r z8$d*co%UYJ!wQ3nBK@-wjKG0hSxt%3l`Jd%kJ8 zIi&Meew<#)B z0OAh)=uu!o08zvM#La1^Oe=>f#QQzFJ@V0;%28*X?zs;}iSHwHd3bV7O@|{^4CANR z>w(A@*i3VPn{Nk6%e$lz*SqdnfBXhaSf{fM9h0NVBYy*MB}`kf2{beqI)9dE#5)cWDe3+w6fjJw9rhbwT7XQ zKKKjH;K$}DU8fYdMy@N3E5J;2j*J;Zf^P~))%0b43X}oxrfX+f-_=-n@<`|uq9$<} z#4~CA_9`yB|LpC4T_Bg~0!u;`F$?fCWnA5lE7mc#$6QZZ?5O+tP zOgXY*(CPy&cInYF!gZmHUZQWS?i4Hbq4E2|+X%6xF*&SN$?A)=VX<{GoAIFY^q?;f zWxEeB9(J^exIDWqndzW_wB}PhCOzoK`HqXtA6pEa5j8tk&dY8rg~qUU*<+y0^NwF1+fY@Fn~wujoD|piUOoV5bfRnp zkymGu8poe1BhSAsD!YyB{uMXUzXfV3@jG6iwYudBk$Paef^!A<$SbLwxhuSJF1u|9XUVY+_4+hLu8Yj8#u2%D;?kR&ertyMh51#M;N+*(GZ0 zWLI*1O!|t?1Krq!MF3wInllUh(E3r6!g;_=*tuvUT7}8fRbgxrz|~H3+7q$zeKr@t z&Xt@g@O|K;^#_|Ex%5K=?m@`ur+jU>Ce&T=l?eNfkLn*?c?=#|j`s8^KB-=Nw{PbY z9aZ@)fAU!058q&e99wtvS3RZSS?9|7Fw*+CNYvkxcfw7;MP(nnhN}7<8D-!+N~*2V9D=?sCzjIcE;kLkeN~eg4htjHAVi5m19w3l z9evOo?~hxKE2X|KAqEbFxGXJ&ZMwKTh|2lUx3mswQU2GVL9kdf!y~Ipd1R@h6yslZ zx$p58TfI%=u`?3HlRh}EBT0+tb|B97XR=s?xL<$k{wXW-0y_ItyEIU-~kk52UKxh?zAZk7XJQUoUzhE4tk_~6c^??Dqdx@M67p%NM)U=T9q>6UV6 zoSlBZ1QwP$kq58zx;JA9WqUw9ILkBYf{(_x)NXJPsFEq&X;$R^DzyYhsr2Iy5rPVMYU+WuwbCXZG?Nk`xv8x#Qg_`-ObO08RqfX7aBUHYx!I( zC>|ab%gnF)S~L@@8nlYCfdsd&eLH%t8*PaJOGv> zF&44NJku@09h8mojth6kJ5f4O1OZB8!_g=vmQaFLCQ>~(1W9KyAKH=sgo|Tu;o^Qo z5L4e;p?^QF&BRUa3D(o{RWkQ#U=cm@pmaPJ0v$O zHU?H^X4r7Wtce@9O4yRX7`?Vv>Z3@*p6q(7bAtU9aI$GFlngYrf3&8`fJ_vZ0C|bS zxe<=xFjMa_0pJj$!~X;j{UZeV!_hGT7)8Plod4{BAL>opAh784aR1qHsTs(|DK~uB zI|2ba{|zQ$q=Kdgr`_yj{*P?w-268&PD>`%`~l4Vo|_-6@*6lxW4C=-^d~z0pYi=8 zL_u+~2(3aV;XnB#?+=2x%DRI`QwIJC*wNsEE7ZoVSrkIo(*ty1wc6Xc})csn3TOLGVxZ>6oI^_KXcTBpf3 z*{pxj{syjP680}a^K*a#<$=bpG!1_CB`7+m=a~N-Nxl;%Q5D+1?UCiK`+j>v0c9Qh zR_HPl@}DxLQUOV#@*>3&jS&;D05!_+4+-w2fWc!Q)fs^sjfWWhi@{|eAloQ93o42Q zFXmtRP$URi2P`h24z1Y#h1Dj$x%CT68r|yk+t~jimPDvjzaEStmm#ov1lH^^ zv)L80*a!7wJ;rAxa&%penBxzm`L>n`VIZHLPDyBa#cKU(MF$}U(q;IKno05G+jS`k zkFoGm+7?B6x&B_y=V|=ky3Tk_=X(7?lHC60S8IYcgebckkKGnrSJRADYqU<(>=y~aU%2YsxuJfx6>HYsmx+`n4 zr#Otl6-6yNCZ?d}qN#$9K;GgW+8Dv86mQ^g(BvQVo~i~i;Mp4)k`km?%5RDVYlc8m z$6(+-$9{o5A2H52sY3P3g%Y0hfZv7rWIUz-%{|T}vs1Cn1d~N(w6O2q%e#K`ao_r) z!9s`J(KBhJWv=pqp_$%|2Vzizg@BMBR*}(aa+Xw>UF5P>gi1B^Ez= z#?@XUHhiLFlzvT?Y=T3&%vnxBS((HbAHFDhHJ|!9N0QlD)p@0rtcQEThBxpzK&WM~ zKLi%3R=GrVy0KtQF7s2aH?)KKVz!dgr&-6AbS!No)okBpl64%T&?yfljxlD|Vg@m{HMB$9^|rKR8wqs}$he3uYb#-^ow`+d9o;9}Va>a32 zkA1bIUzxk+=^~Raq4)jHt@SxncDmqoU3l}wt9#dHkL0q%zRFBK$AYn9)zws~!Uz6S zy|`4|FsP5S&K| zkoxL!Sr%`Rjwz(GLiyp#e1I?Gx+>#*XOHgtKa7XWP}1PpG`cIEde_AKby=%x@1rwr z-4J<&2M*E1P{G_pb{8cb?9!Uu(bCHGrdaw=fyrlfNwR8f8z!i`wv;3w%vp5VW>ZP^ zNmNLO0$X)%<#9m$FYlAipb;R5%eSLdo_D90x!2cDDS;}PQo??$eI?`Psf_U0v2GAp zpy2qJ1BaYew|2XPnt^n(GKd7Lrp8>_w$j?#M7*ZdG?Ihij*ywgb|1-974uVcLB{K> z|5SSP7BaXI&}%>=`c-bDDgCr#JGaGrGf&=Pp`?krdJLv^hU$iWJm(x)Bt7;7eniFS6jrV)VLIBGls?8zBYtZ^dVZM)sa-Xla4m4HP> zFL(afet)X!ae8yIf0HzrBw9A@v?y~UtPwH;t#_Q)KN_Q@8$zd#M93k+!2yMihbNna z7TKJMjuCM+NLLap#kgL4wX8L6KKBimaU#aAHbKsLrzzW7dQn$Z?8WQsD(kwNDMLlM zj9v;PiAH=$0&Se(?&XjABO{JZ{rxNl&sgcBT>3lLflkZg6*{=cMQEM+g!|&m- zpRkj}4Zw|Zved-fAdXcajP)s9A&O`F44eR~2dJg^NkTO)+QRQFa4>vezOr^j=ZR#f=$u8?h1Io{a#1tz$i#1_ltdu|6IC!sByiOI7MMa!O zIHNLe)!8H_9O)JwLa*+9IL69sBTOys08VFnm;5yTs1})fr)woC^oYxYdEhL5!WkN4 z!tO9z(?VKx1hKyly*RbF8%;=Mr*ST3Dp_rqsvMKkoHMY|vT#xaUB9EPN~3$q&kmoe zziHa@3EFj0Z=KBZ8`HKC4*GebTqDVL769*h!aD?-Bec#P@ z0da{CuayFr+L3x=eMT&AVuK~Sa=4EKK@vzE1WI3QEus=eF4rF*R zKs{^JGUPQF+1o}$FdyeucbKv~-)kvMCiNGog^hy%H>|t4cV$kK(PfvQyA~-6-r3r& zFIZy{j_w!$eawTWPpNxbUdYNpn;@57E24%sPLxeYLoNIIp{Z#K-WIpGBpVmvn`3TH z!IomFx+(na9S_Pi$m38l26-GHySxE|{Y8I&OJa_==i6PEvyWJMGndHzsEvq@jr?nI#x)+5yi2SEAip zkIB#T!MH`(fy;v%9q9wFr@GzBRUZVfozfL4C9mZ%;2ayYIUShgkbL;OKE}r6P}y~3 zP>jv4G|J}kuE&=eJY$<{Hd{PPq_FYd zqWI&3vio;3ebOI7rJD0Fl9Hb~DKEY(m=Dv?u6q1V83~-PYmUH*x!UIyf~vBel$`7G zG=_sm%nKf6GT&b-Xn57no-f;T(SwSr0rpC~d*Ei*vy!+x%uH_E?1aPC%h7Um7nel9 zdbhMoC6nrpnMqejXN`9FI2tY42|DI<8SR;H{Fy1|n<$i#Y|s2uGBK0r3e2|p#q1R4 z6}qEc^o&n}91d$R*J$+N=13v@M?X`un+V0YhF#R{DVxV>ZLDJ{Z6_=+4EWu--iN}2bl+XWBTXX%0HqrRq+@+CfA%m*i)rfk!nXy$5?a0Pcc zuqEx>gI>R$l0%(Armd*&FAt|36`)`M)!_281|8E-`SwYgP<&PHe^=ELV z!-|Kw`U31qvLAgo_RQ_C5=rD1e3gOcxklP4EBD8~s?%AEgzZMYgkGM2_oB948#x!JAdm{ zPu@6W$c=*iF-S;jA=q6h`Cy#^0%UUPZH*?U)w+y= z?|X1zVX|{!!Bh;NWK%kQKdpiCex;Q&CtW!kmW5xB_y2osEt5De*WJzBm zVau~FZNq2316ifnIAWZ0+29Wqsu?#>yZg}K(F;3*QKcQNXjrO>IQ@fW-}GTWrNe2kAmm`0 zRxqQPPnUxlB6Rj5;Q<|wz{E$su5YmBhU3tQzhPvt993dBXv%zpUH24^mZqy# zFp=b*M*mm%LSHZ%S0pC;ZZQtKNBH$4Ihyk$(7Jzl(W^RrS>@Ud$7nuN_T(059a~v6 z*|jNm&=TOeFo3ugDH{eE28VI#>+-JSHEr6m?EA6?rrHI~DR0|-d;SRGM4R0M!^j9t zZgv(eJX`Ak&#mv~3F{daupM-?_={a{5~~uJSNNbj=-GB1>Q{TUR_@i4)?b;!1&j4O zP#@x+fdrE<{`>c=a))N3(}2G>C|q54IKSage7L^xQ5dW!;ogN{ zw!lS{b$v{_RN@60||3`}GWN1*T{YA&;6H z)J-4#5NWWmjvLii{t1*l_yQMB)USWLN~le*cfWNtf);(SPkUsL#QUs!-OX(n78iO} zE{D9nAaAotxvzA{?36dE&6KJHv0YeNNO}PAo=7egIgiotNXYWw2^P9cDpWZAx3i~` zxcBuuT`O={=2HE6lgzbbD)7~Um~9yYu=(4`PgGA`=bDuzFR0nh{POmmHsfGC*5$Co zPQ6LXUKQFiWAft1XQw8lBw?K35jaR`Oq6blN%QRVccG4ld04E|wh57%PV*1f#+rfH z=^UK}=YponxEKDsXXO}3`-G1#8dPbDwN0#9}v%nNxduHIH84wLMgz?`i~h`K$uJn1$K}Z@P2~w#3%#ZGF=J z@?&Rn*4C3b}{7iPMKzN4B==2 z!>jJzdBA{}^=*wvm6WeEmw17##)&+fD#U(~7~XVOHA4`hW?L(w-cP_rKS>-DpA&e& zj_uaWbd#`iaP=qLy! zr*T+|uw4koxvyH_z^Ez;nJp8DM1iB)UUHx*R0P&u3?o7_Rt#trd&s;Jkmbv;Y3HiH1 z&G#o|54;L)zDFxdXd6DhN{amGcni8?*o zr#?LOda^W(c;wHnWtb0druB%wUDl66j0GdWA_G&7JIv8wuiDD&DcJdPV+QAaQ7|nT zyXhe=JyakTG`f~S&u5sPNb(XI4(oLF?u43NZ|->VZQ}~?Q*c+4TB2^kVC`wU`&lmI z0DI*(tk;-w1i1Uf?UgsWgiQ-RD}}J~dIi6${t?VE7dmGZ6xwP|4(Iy{+l@i%ofbZ2 zuSBUZ9T3TQnN>7p8xNFWaQ)!N0+^wS7~}BpsgvrjX6$|+ZLyzvJfmAGV?P>P9WLRV zu<4f~C`kt3JUx$oH?(WGh$8%eg#8$vtlDh*+1#$$jibcWIfq29E#)@3gPy&3v;TF9 zZL}N#cd^0ZixSjAddtp=odH=po>l`#xO`3!rOrp5k|L+tLsA%h~r1 zkkc5qh;`Fi_NfgGKu!&vRGkGJ(%Z{LUfZna3*|)6HM{*%;bowKJ2@RBrxgi)uVTzf z@#-B$*O_;3kFVD`8z73r+6QdvIxWIG)2Y!5(H4sxp0kZ2gtHPqWE5lf9xid!wGvd* z`;uzPm0{X*?fhb^^YbD#u)@5?Y1vaR-oXwNFtNB)rUSuqe}-;Qhb_VP>i$*tRlkJW zw@vlOasVJ$)nIB*%Iw9^i1!=K50dT>4xS=+T90TgxP<*z&x^58Ap&`%6c9oQ9}R+& zLBVG;8o;*3Qh2_=@nA-|!1*1Hn~Mn3qnQzWO8WtZGuKre=)Thu$L7};&x64`)}h}< z_)>wV9YGpVB;SjDGGy0Ra4;JAOb2F)ny~35QX+ZkNvZ^jvF(~8R+^}OiN0FeAVjxR zC7fd$6`H3=X`ldVe41roTE$y01$W;Cj5?b}{{BIRc(`eFB!z26aKdYNfx{>QPYWKX zI{=2nT!EUK}DrQ zzb7iz8eE90kFSv6y}97|#cgqD-LG*{lMKRJ9{j{+PuL@FGt{0l!Z-$2txpRLODk=pJ z6r6bULS~v5x?~^eKbiwuIuxaMN;RLS1N3@jjDonpmEs-bsgAkDUZ|kCJ(W6X8K)f< zk8&?nL8?)FO{grSyn&kS;my=>S*_r&=I+p>eQ#=Nk!_M1%X8QD`Fcl-OWUO)4qqT+ z|Ax7#qBf{1eNgeSMr2bjm5yG|SY4+5NfE8pBJsj{rr%Ctq(`IM3BT2k6^1@_BS`P1 zh6VA!IIQi^5qWl~mUhp;bxl4c`$;ZcTP@-1dl2$0^Kx?f1|wttg*@9+>dy%$Z(gSf z@WjWCTmi#2f;*L99*sLElJMPE1yvFWw7}p_CQ5AQsLXb0} zUiS#c1Q;RswIs|+g0S3<`vb{V<1tjG{njVEDdeuAp-q<-$S0^!2iF&3nv7rJdW}UJ zI#D(rAQwP!v!$(+{3YW~3r?y1i+fg=EDyihZ_DUm{wj6QIbAGfbIF-4m34(m&HJ6H zjElW{p6jVAt-e(1MFzmR;DSnO7Ds4CP4(x&5`8ZGcXKCzL3b>zVhzx?DQS1#U4ET) zUR@BdQ|wb=?2ZbU6|+)a#_{^tgzDO#1|RS2Y?28u&dvF)g|_NC-Vh+oCD)q1QkE#U90nRC~@})GocXLbKD(Zt1csr?guJ?b$v_D1d8_b~zr+=zdmu-th#YjqvgCu%cuHiwI+}z> z-DY8OW4fD&)OCU1da-=^#eoi+fTqyHto;efg;`3yHlM`?8 z6L?=y_mWflY~GE%f82811Eo<%+Lsy@-b~ zmPe!BbJ&o+iGf+b(!xEzk*k?9oqp{vr~~}hj#wU6&-Bqiv)2*cVoCf);i_x2Cv5iTjGHtuHeHQTrx!-^eUjFn z1Nk8l@rgnbkO+)ihZ!z&^$FWsVEd+LUf(l(p8HTPv4vn9`I$RG=S|hkkN=Xt-40hq zO`)eIHeuoU)1!OVVNHjq2x`}f>YP1-AOK1lcpGZ=$R9XG7iN+6gI>pU5b9!7U*zYyXN#WLf16S>l1o!U=p3|mVwDwRSXYc zQCl@|!{<8(QbJEcTG9$7Cr#p1{Ow$ad2z;(XZ8v|k#|eUQUr=7T*~u&l7$M}dq=*D zUnU+W-fBwFTtB*%kP$AqPX=%I-Qw=LmL%@@Iy7`5TCTtESP|Np^vm+j*S7jy{Zv#x ziQUWfQ8@^`)5_TJ+jwz;=DA+O^v3F{)KY2x+FbI4u;GLGqVPqQ@p`0)Sxq|Klnr#f z^lw2ojLMwU@J-^RJt)@{Se_O00{ed#;V>V}81wQqwX*w1-q^@el&6keFUqZ?ox$#H zED-JK1375SIS$_4F`UgC(c35utEa?ETxo@yVqjUJTPvX(@K;7$1WWIOp)cdlPN z`58Tig#%viE3@3)I%FNCO-T;2G+3)552YbV4<4tTsahfoMp$>!jhQX84P^WwB^8m# zF#xHv(y*96p$uE))OtO(`6g`(U0){wy~wwB1nw8Epfh8c#J{XL2udauf;SuKE}Pqm zVyo-WFjQSH3#6vqvbm)0!!ffy?!_@EZY?oa-%{KxCVwL)~r03_6y+#mnu@e~|Ylv2q7F{G9bW}S_6~W4c&`_E4QDw zGg(Li3Sr{;Zjzu>s6x1MWCQb4eQ=AVk~QN5=&T?P+7}w+-V6VA3M*|7iU!UUt%;te zT(i?+k=Y7o9BHEo;X3kP?tYkYo~7ID`%KUtNU8{60dUetl)EhBcq&)KKHuzmacu5{ zI|j*l^qL%Z0)I_I>oF@zWQ?9>A==-!dJ6{zXPO>d*r8|;G<|bV+#@&+mEP zFUI-foN>k(-(TWjaj&)RyskOtHJ9WMaZ-Am5wOzLjI>PetR|@-&W@9vEdgFUxvPB) zpa_jjRXn!HtbRP){BjwRUba|H6P)^$;aDZVty(2TH#lP&nX{z3J>*#b;5RZn3s9i} z%?-EFa3af-At9(7+eYBRx)T=$W`)3WT6kcJt!hO?@5usa3WIqCzSsqMko42q_eK$d zf2?l{XVBXdJ%~w;nH}54ivV$@xQm#uf(ijgp(&6RRGTh?GigQEnCkXL7>O469Cdhw z{OoxHGiDV2I*~&@0A(A3#<&}T;g#{ zt(D``m|xD-E>h`K%BRDNslzAYZ*WxyS1psVAx4C$&&n>&RhTL#5cj>KUaLN~odtTJK~>w`cpt-Ma=axYgIP)+6$U5b^^nsWD%hNl}>6(~By-yU%cnWdd8< z+VPD5@$G5Fr^|EUY75)fL%@mSkQOptM? z+tjGhYSgWBZHgJHLk8HKv>OYtQJX&*W_9WNr{{oPy4Ut~H<9(8=bhu%xo&7GoGqg41< z0B#C^W&M@2w4QD$HJUd4NfUMgLL=%ZY}Y?o>u6iy6ct_Fc|ov;i<5_OX2mU1JO&zk zmD4Q)l(jI+?9LofCoyr(><{aB3Pi|0`d~huw3<6#G2XDPO|-IOz|A(_Lp`5-rQEA@ z2%(}JjE<}O*0_uW_ z*7qh{M)Tn{jG$tGsM8ZFV$sB9dxspQMOFY!V=V$xQ;7K#v>wR5m5uZpU9gBelR9KH z8q=zIc-S`8Zd+vyeBZJ?=;_?I^QA23y^Kp3J|(XJM$6v}rAE`V%|D7Y$YmF$bk}m` z*9mESvy|#FoI=bK9%X3odo2pKy3nLz0*_=Mkz69&3yc?J2mBs*_aLHwclpx(*v)n7 z{35XQ5uO+S(j}JFZWUf)fN8h_2L1*j-4o@_CZPW@XBaW-2aCoJA$lK^9pWTYm3uO4Q zWG&8&qzihR@veo&CQ}U9Brmo2342Q-N82c>o9sMcY)TnwmlH0Xr;Ui5pXE9$JdPAj zJ{DOTFCVvO_1W2tLX`#&u;7BwSA3jAJ@3T&?zT?;$Q`UyqzeCxLWqXPtnp<`=mib3 z7+kxZgMav17de5!=tz@bYpuy*C#2*2V{&fBR_o69Z?N*&gbS>CX5@J+q4h*|CXI|9 z$^%Xx0L9f4^G#^k^jwXc`J#}JLVL@?$IFQ@F)_07tbRat;Sh{vXkh_YrQ;^qq(?56 zxc5S#2DwLgk=L!dc%;_}>w5XC=uo}P1a(5gK9c9xr7y816up|f!8a>1L+>LXrI*> zpIAg>ii!p!>o8h*e7B$;eu8Llej?2fH<1!;bNNUt!W#!fHe;U|mLyr@QRp7*M)16t zY{T#bp;m*!A zheSP*f^QF~uI<*jaxf#^t}8Fm(>OV`_Abo5-c(PfU6|N5I8VbD>~<3W2cfQ0;|I)3Y6R<0uBQ-tRmHePNjn1O&wSMlbZ@)m&x zG2E8(M3T$3i_irnH%yfH56@~lqsXB?KsvAuNJE~b13P7aIuE-j``?yYX*5Ro8FF(_ zZYBJ4^(phtsCOc}H=Z0YYUUVYo5tu+JB=ak8(h} zC(ZOM^)v8bcB@8CIUgS`u>^@>Z|uz@z4v|%gb0fW!#pi^nvroB1wvmwm%7YKJGF1Z zPkzk15#t?P7BZFw9&%#uX2=d`7ytixyLpptg@&v%F9{XM{Y+szL*^gou;q^4qkx)8Ot~b}li|e}s&uPKR)q zaw!U+bfhB@&OHtJPwx-nVY}_N_B%1 z01AOI^uMaM1Kt8fmV+e1&)@`E-~TE{mIumWh-{9YRh9prZZ<*|(Az7y)b7E}`+my5 zx3_o1;7KENL_ti`*JJqkmW(#fV%aq0=ZAns3@^8a>^noJTO}o#Xz61mO}CkN*gN01 zh4HH8<`)dTW4v&u9gyBrfBOzoM$XDA($vYZZ$R;vn&SaAQ&{QLlw^X|vtxnKhoQJW zIn(!mNrCgeJ=qRmWuRdOr&;3~`0M*{p|xfMqsS4D`QAqMG}jvQr|cDoP%1IoIRX8I zQzT%H(2`w2V=IBsn3q=?Eh#0%#Lgazi;K%Bw$|pzQDM+zyDIsMG>u-Tw;;KIz5n_7 zd8up+$@xjP(?otIuTAFtIVv6_+CQTNL=yjuQo9Yh+A-73o;)^9v65wE+mS44M7VQT z+z-!Fdsd~)`5)1CE2j{bL$mg8-v?btD`q|yxqMftNyC=f!!oox&P^eQHtdy51q3#;@XfMX9La2S{D?vPiE)Owtf(M%`htK?dZFl*c3CNE2bqXFgk0Qr;NN{NWfiqFj|kKdDbxn{-7$IDq2iiWicZ4RXTO4m?#tNBV|(bI1D zDUiL$_5I=j|B&%;hM30Om^3f*h;3RL|&08hBrf^Ix6~ zQK~B|V-^(`kE}n9p-J~oc(*(Og_yW9xUQIS~~#otd^Rn}|N# zHQWJj>7JLb_9b+>OTlF!XY7v0)y|X1`_rI%G5-Y z?ygqY@qi^FqyAU9;ONNykFZF4d}c9u-cM`YH3?(wtK8z*L5{OXk3VbM?XcEW*~X9;uQA? zZWs8>gP^$H>0=&sIGn^lr*bKgmqGwXvs;{Hd%lG_a?LL6dX#7E_ox}UqE)5mF;)QiS3 z6^cPRrk;iX2an^m8A6!pac+(vO69iZQSu@AV7dS)hD@rLenBB0hfLtHDSi*d_#tuTAiJYVuAxe$5sz%r8yxKg!zWlM!i8Yt zVB<08)r)$Zn|c1(NjsP;Q?DO51*Wj}G@TJ*L7+}12yv^@^XeBpgT_2H=7ag;Jt^g{iuj{Ork;mW_II)UFFGBbyk9;nCa!s%h|Y}T zb>019@x1@typwP2`=`iCxfqS8ZIVsE$Z4E+Mx)yLd->(G9OW>@o4tokArrnbkY|T; z64w{+<>mmc!+|a=k16L3}XEHic2% z`%1w%p_H+;zao{O!9!&4$Oh&T+9YpVh}xt?vC|qt}-9f0Z;|{V8mt9skG* zQ^aRy(E`c-z6ItmwxS2KW;yLpLO0ncB{dO2e?2X%8@&TlDil3I6jMd?3P0d+5w{YI zUQJodTdJy6_BQ0{b{k89mKDZ2?M@!B2A4h*L&Ot$t5`EZ-z;Z)f-${}T%U1rV7^s_!E4AVfcNA0ObkI5^|l z6>(fh1%BF$-&tQyo(nmW4#xkC>^Vh_KzTPdT>H6>#jzmEZw)owScU@&arxC;r9(F2 z6~P2jBnmKt;Q+}ih2?(L8%4!rKkHh)v7qc{v`ujp27<@K zh%V^aFhB>*2bE6=#03B+7Fv~VL+I4IrA{BOX107!p|xs4Z5&CV{hh$F*AAdTc9q7J zUY_^Bu29bp&kDmuzQFGwAn}kO4xkhXJLr&rI0d0#w!pd@oLV=@j*qT6#mWW3uyVlY zW4%<$4|Fj3M3qx$t&`vG-d-EIok`)(TX8{rlhyRz8`rd-qsCB*uT>HC5v7cB zbQz=*k$Xze?LIx`V{P5;mc76#z}h4noc@{$*3F^Fed!Oap!7Zs z;PIGhu5kI`3CxYYUnQ-L>QEjmT$WP*?rj3SUn$xw1X!EFaZh+EBGmkXXhdXDErL$F zrBcW#cIchIXG`K*#}`tzm?a^v0y6O1JA1s+g!d3SPlLxr(m$+suF@T1C!8)7EkCGy z5=wz#B6CJY;xZ>fR%ei?v@5if90TIj;3($VJ1*Z|%^JM4ybB>0MIlNb_69b?0Z;CW zCZuQmE}{9})7+>bx!spwZ4qILx$M~h-Mu6gF(#HZBEMj-HRe37IC)VK`%PjOLV1Pm zZfOEhiTAJF_w&Q{fkon$CaS;Ottoo3Q5klB(q$}m(}MN=0?SD#`f+x2axoa)N=LN$ z&L@-;0tsQU67asQ{Q!}a>H$IkIYL8cwKqvW|8LfYZjx`_1IqfF*}B`mu?17NpRpJW zUj4nbQJDSk0k%HQZ9bV=NV(l*uKo)bQYFra^ zc(!~Zw;Mr@FRCd*)?RAh$BTI)!CXN}7?+Gxm^p(}1$l}l8s>;>Q`{C~RPF_mIn-p3 zbTW1=x05wCFUF^nzfY5m5et)6mK`mT*vto|mHLZK%R3S6J!Hrh(AqLNJ2bt(&2hBo zjTn>;=Eq;~(dm&;(Hs2L~Zx%>Y|{Nn!$f!StaP zE?kiJ=P<0Tw{@H<8;x64{%5?oool(UO0RUsk*0Qjhfm0KRr_1IeG+ahV%M~xRL630 z6l{|*TtPNQZuyO1bTYn;wcb3Ba2Y@F&LSEHz57XNp69K-pVYo7OuSctql1=|-P^~O znragr4z7d4{n{Jj6dbXK3H-?5@_R`$R^0hm^orL`S}zL{Ld*mnB>niHe8Iy zu__mGf35z$VHe+Tj~mltsqqU}5l1;kbI-+(fxW8YE(_kmj(gmnO+T#}to8+S_TW!t zyDJUU4Lu?13|-PKLasTMvI7SShTYP#ImL5#a+mL0bEtP~)Yvm7W%)-Yf^Ojun%0}w zJS!@ZZ;n^>F(tJ(RH>x~hzX3tfiqTZQxlrulxI%BR*5Wt#B7B8{wl0H;8SzM0pZqW zS%u%|=7FSj%>)t=B-@EQ-BzcFtzxHO&J*gsrobqi3Q zd=yh~^b^Wee+;c1>~_>pr8ZdiJY*X-7`U&O_9$3!_*;-RuuA*cX>THh?UvE>DCmCG zkP!o}0F020-0iGrhwqRkXV;W3CwKL^R~K>bi;dW2S}zh zF$J(l+)mjW@TRgt2dR0wyY;C-BPhN29E86rOy&eABjcp-M6WET z3j<7pEY(%fxwebMA8k^!G@j3Pg(yoD(XbmP*TNnOnSp0cF1;;yTX4g^fA8K_tsOiy z5_N`&jE%ex*Gm*vlIyE?O?F_F8qA=V-1Ya#OK=SVezU`>P7@@%vkAm3DM4Sq+p(Hh zBTa{JAyK+L3-3%*P%_$_BT2CeV^JFY)%JR3jvvb?E9TX#LfxTJLW8fM&bI~ivCh*F zfB81elaa2!k9LcnZRAsH&19A5P=46k+?sF8hdmcS^qUY;uK_nnwi^KL!;T`72}vt@HjQ(6?tKfq zWFk5kprp>5l4UD}910LnEUA?6SK?fBhoi8wFsL1^PO7=rr!&Z+*=s*M25a?3GfLZv z%8j+XE!lM#nLsHy>mtZVaXD;EBH?%b{YUkU2QU~M6*4yb8fjs93_JB`TIGGB>@IM4 zIG8v2Lx$Jl9$bl2XhHUTs6>rMy;>9ze`3h|nUo%eKd{l^wBn!13no0GJ zEo<0a%b_UbmpkikEo{!_zTObDj~E}mBcNAf?Kxk6E*|^(zzNf;K|WZBbU{W-9}~DC zp{}MCF>wu)X9js@sG4Y{@V8EniyL-#4^lK;Pe5aGyQ%gv-cg{r^$-F|D7SD`4H&1C zkmoyl%xFpptSn6xxCvt*su)ztGuXf+gx^;yV?UsB=|HD4P_=U9??j;gSo)%10mDN1 z*mFliuLmE3{R0o=1q85+aNCac-|SI8u4TTf zx#bU`$Hy4czW=?F^qPB*Ctmy&jq)trD{Xb1QqEiRnM)oa_iv{XnsVqz;w1}wF6pB) zq;L(^hFm}YB;+%Zcb{ncx?L9JT=9(n?&H_mC> zzsMu$)3W&ot?KDGunPfwrSn}iwp$0|@kHFmul^Z)A2SzUeLjhU9@PrV?HK32S6&}l z2Hb>TdAuzq%BUKp*p-8<$-xZFLXeD}4O0TxVcgk^bi0ApquMwi55dD`K7GGKmYjjr zWO_`Jo+*fA3`Um@2c%^wd>XYTOF@TILkfbqXkDXG{sD|qMrt@A0znzs4Hsx`3zn8y z#|H595#yP>+*n~!hyty(xFx%>@95G&vR9wqy?fKn@7y3Os?u4x{RFjxr0#$Bzd%W+ zeU~TdY2xfO2Mt1e16MV;_~&kgnQ-dc2}jq%R+B?-n$7gkeBRK@KRexE`7Gd!Iebnb z#_1V3<-3EM4qtCp2`kj$CaOmChP3Lu4z}5mF=zI1FkEUJAo`j0_Jr~3fL(EX0=)Xg zQAdZ`P{^^Ul=V|a)!X0B76(9-P~U+&Zm4S3Ip1}oRj$u6%S5-3%L+5dC}p$879SLU zc2&X*l#AjVBU;hab6D|vx}X$n_)-Gb@`Mi|%ByCk(xT`7<#`FDa1*x4S3XlgVD*=N zXhf@7IKgOopQbPTFAh3%zeS0=_s(IZND6RCAdtZAAl3Op??$pQmQ(!IjK0;53+B-g z?OMI>7 z)Vqd>r@vHW(~UX=Ijv5I`(Jarn?N9N-u{p}Uwvg{z53uUzvc)WFStr|w#lpHWn$H( zjL(SAv1`JzJxua8_Cy%{zHn@g*M$aBfMqY{~@g+Fvv{AfjO7-}wu^|Vno z6J&+1XU{o=pxB5_B?}04BZ&g}L9!kZlA~g=E`&hxLDi!AM|wveqtex_^PCC>spu$& z6x_^wTDEdq*d67&jLs*7vryiL>n38kyf(3KZKhA?!G+}d-jy9$*-YgH9MDar*<3rL zXGg*)UI{4pA5efr2JH?kvPKe+W&-{&W?Sh1hCey_D>W^44u5+e8~{iur{0ofBFjiu zALV>PF)#QTxr6_QcV^`5L{1M1Gqsv&+(J^XKzpC=8SLr0SmrCl+JOTR*idokl-g=X zPD!jkXs0Iq`L)Ck*me#|DTo^Ndf8XAUQB}=0#nUfXk0K$70Z5WSwPDJqkE3OMj7ul z&e{E_=p!2)L8x0&F-|3b3lb@dq??~+uF(rPTc#9Ah^5$AM5Y&p7zgTNSdh!12}lB( z3P~ISyJ!}FOFmw#_#CnMM><%1DzmXqsPl&fDF{&Da*y{Xc#k8Q&fQcI%YYtdAikU@0|)ID;&HNU&~78*bck~oap?N! z>nD<8vr@AafbMS@py9uxfoU94DUMTVIjeIwdVfxn_V_+Mu77C|P0FwQRdP@Phn{W# zp~IXsMZxZC{Ai+oK%Oe!pHh*0bDa#AKS3n~;+j1(EOS6!r^!bo9wbkU2yH_H9K22y z5qiL~$IKDGR)C`>GNAc}VX#o*s7C{J3!gw$1rueCH^sS3k!lkKP4opM>fDTE-&@QW z0bQDXtOt@))bhfKFFi}r{*Sfw&iEgD%ARGSi69i_O>09A_+$)`_#RVYPn**ZRPMNt zoE&|!ClCLEiCS} zNij*CX?sX*sUt9v8es)1xG$7fJF)5Js? z{@xa_U#!3U$#@aWY0JR*gs)wgsm zkh3X%fIS65FHegLLCjPTglQx(DeU|bL{kwMDgu9(CkJ9|$O6yhOex_@ zXgq=JjNUsa6R^0(?%u^6=CNT_9FVY26CgcOr#cc{2N0-0Q+V_vITqjh>)+YC=q&Ixk5QmNM#m>oTU}E48yrzsUd1zNP z!OM{ey8mbaS3uRK3ry~Kbmj?r^+=;JhP?!pD1_mkB7cca)M@fB+PHRdkKhoML0kq7BmM!MHu9# z<}l6Bcp1Xro@Y)9*FpQ{K*Hfrc20P-fQAFbk>@`ME1b|4FzAu2yVL`_b)%#HAXeb1UwU-nB} z7$!bJHzf!i17+fP%Aw{n|Bzs}2)<|yvH+Gec5E~101CJQ@Us=(>+^asi3^55$8-pD z!_7fxF&Xkgy}>cSuh>v}s?5v&S5IVxDe%G-1ro3L?ZI)r1QR7q$tx2 ze^OF>`ZS)o|K*zbH*R{jkZ!2ZzLI*1EI=u61q}Mp7L2S9+?eBfcYy>1)LC*;Uc_4MtHU0Ir&vYP&PB{yoriKZ^*6$#RQe1}b{Z zxP_h$&N@?|cH`QrYpuTn)%IPA3z ziQa97Okk}+q$zu+AG+d3?`5m^N!K7Bv9oH5JWSow>CJ?pT7T%54==p)jobh1F7F)*T~U!AX=0q(9Fm+C#1Pn+N4%GcMvC zU*#cpeuV%XY|ic{Mv9O|3$-icqQwb8?{`J2e0S-(HA;R_dwSW&yP0R%Mtg_2f_`^i zBDyb;A|^K%I%6{`wkLM^8aUi2{N0{E@z1lPS9wQ}>VEYpFUW>L?+EQQGe+BEr`6i6U}Axgn)&&nS{>Q(mRpr)Ao-W>qHL)&y4LqWGvV-MP3hdHY7 zfM5m~K;WYF4DGR_JhRIJgYW_B9wv=8Dxlv4^yYwbc7Hphq*VF$wno7cikg*c<&?+k z&;oB-e=VuT{m%sJhBj6F!=D-8l1}o0$PBksx-Bb9S_MrMp)@a#fRZia)b{732i>I; zg43#Y4z>i*7zPD)(D3l^+bJlO01_R5Ij49vQuTSGcQ9(P-Aq_zD|Pv_in9n&hU2bO zV8fSNa>OqjjsA)6+8Iq7trLQ%$pk_3PVCYz^TUWNoUqxk{oQi~xdVR$#~T2+LAD6d zi7>MJL!CX!&rkhU_wvt9NP_>o*gsB48~h;o?jOWQznhbsB>&^dqk8<$+dum+{cD#5 zTm-m+g(l+tmLDQ%+vgWj2cryE#xpH{SN^u^{6p^p@HWAO zw}&-dMr7rAgO+AyQvvWu{oHuU0GoOFYX#VjKfjWT{dO+h`W0<)ak0^9PdUsP0FY&t zn?5@I5ET;2OiW5*qNg7;X%qJ?^_G>9QInUCT&7*!nf(p;Ox*&Y`xFwTw*Lgx&4_dG`t|FJtz zeOFH(SMp%oNgWwm*uT(q{VRJ^YrZhW#^#$(!DrO{-c1`unqD>UBXJ_Yl%X)=9RUJI4FWu;3^j%P1IN)ZvK&)m8l<87F#8gh46R{^PNI)#Px# zs(vd5wNZ0tZn+WEvA*iIt^^p~mFRu3o(A|Y{QcQQ`M&^ao%WfTnmV9ZF=Oj{9Y8pX z`2Ya9M%i1sXRZg3AWZDE&?%%&eQaKpee>oGkJStp|`j0Bm(wS zF%+Upb~|O~5%=(*8AJOt6}S68Hp_17K5};LXNWHQQvqupd*ps}3Okz~I$ge^s}4it z$r%|3j;nxzpeW0(a}iJ;@h1l>==$0!jD*AiHdug%-e9J{e@JGgGJhyNwZKx-%1OMj z9a!-wBPZ+O0Wva*Mj#53#ohd@Z6UF)1k|XfN@YIu`GIqM@2tWo(g7-WbR94k_zbY{ znG7U?j8mH4zYBTnHDCzZ2B9(@1smH(vQiOaT1YC}O zB(S#~ag`f&2#se8CW-xhaMHcjHu5OK@1SFId%R7wXBwTX@{MVq0FS^w?;Za!#87?r zKn?5dLp$ijv0)TqULR}V2kov!M)s|wZ88=Ap@-Qb_-2jf!kBdVdHqU z?O-#EGF6hElT+MbA>(Qi*H7;7jXJbC8- zy1E|D6}mE$&b)g2$5;Td&ogv4IQbvo6nOUdX^R-Fw|m!KVk+H5#}2`w0ulp`vCmb?vefqc9l>lnvt=1=ZeG?TzSle8CXiqS57xKP6} z?sjJ2_#by;qQk_0u`6JBAy*^g1O+ED|EB&-3qAyp=WnC*mnoT%*rP-4dQ%)f{Y6Oi z2VjgZ-z2-oviMcBj&t0%P%^nKV>1NZOFVZoERmH#D+s~_c#rPrpTh_leW*Ck;qLGC zZCeNM8GjM|IKrY3(Ru0@c&S05M%|}FsX?LP4`?J;-F8&m*ClI$oroZ?7ozt^4HH>A zcIbQ*+!oPfl&AChcGFT=qSDWz3y1v(iMamDgISabY-mOlu5V`ZO!`8nx8uZZbH=sd-~;>}cC zJvU=D8ba!Q^!>8R%KZRa3C2WF``s{r{C_m~jXPR@B|_Uox+@$(>b@JaRa6Qe9VdJ& zpiU01QOOlcjCFX8n8r9+<@G3n)-sV;*-fx!-haU9T3vWY@$fTAMG+JWWP&Z4~x`lMCfxdd*8zqp3p{C89oWV@U-23Ke7JVND-L6Bu%r ziIKf$IMoYlVU{11v?Tt(@g=ebn8=dcyn0)a$QDWE_O_DCCIkE%`nnY#4D)v>ypv4?7c_@7!^7;^1L%O6mEoN4-g#e z4Zbr&L5ChRue$2DliMzv?yHvH{B!xAL{Np^K)$ zK@@-LPg!R0?vxZ3!RxV|G-KOvN(VMR0w)bn(ESfUOEs?9em=r7xRmgdZU9RKDIlOQ z5Bv^ibE!M`Y*0wzVX|RTOusA+?1y*J)6vJNGnGyt_a^K|{Muq%_bGaOQAK6tn2rH( zv{)`}Qw05hel-NC<4sDDt?un+Zb6PW`JRvfB6tRyqAXbrxtKc4sfL?&X^DNP44xKy9S zO0IW|!|-tYajKgcGe(uL=r@c_%7kyZr)-M0kY_brsQ_!^{z{xsEUa z6&ajTCh(CRy8^12)a|3R7;usN_+q_00`byx?R}f(d?mP8-kr-h9TPO$usm{`$#Hpm zDrMop@tA!pwlelGAK=gs->Q9gr102ITyD@{)72AI=#}=}w$9e_MF6k@4DH`U{>HV{ zcz`f`rC&TZGmsJ(LPTL;&Q6A+*LFhSv(iVt(?Q6*fYX!IJmh0Pvu*^cRVB~0cr=Zf z;Wq*J`geqa(rOm2gfigzfL<=!6@l%UV42Xl#kG$_rA!n`H5JSn`wOSd#4qtb78F^Q+XXOFM`#EhhsCHa`f z2Tr7eFdi}z_vg0+robUw<^^GL?bs484>Qt_?KZrosTKrBY-c7h>R_sh)h@00-v2&( zm)2eD8liM!jnyp!Cgj0?7FNz4SDzBg;y9v2$H3*`wxv_ZZvX&_)h`(b*??*`aHz7O z=Rr}RikPj7j`CY-NHoD=AGSJtMg;Q#6@($j{j&px{85mm9!j}oD0z?Lpa3*n4e}eS ziD~5w=s+D1@?wwDw4KSkGj6&@4$_TY?+0!s|L@2>1Go#VR6U@mQQBiSMS&JD;K6Et zsIn`%nKR^?zL&aPJK=z}p^Tz-hR51XXkZ_}-$j0_C9)9-gxP7W^i;ZqKL+Bd?#HkO^VHUS=6 zi_kOA*wgxW-kbV_GP9S@)A4Du|0^x(Vx$g7U>d~;>@#gax(-5uP&%;+t-=w*EKwaD z7)y!@*e4L9u%+pAQ3{ZCK}kP4=^*T9?{LQ-GdJFpEm124XLvfGF12Q_ATYauq z(xS8Y8-{>4J07Qp`kME(>?WF9NiDUTePKux%8CT+?tH#%zXVz^XfJZ?CryRNoJJkM zqZbd7U#W0?0}m@Ow)Q&7c;2fbpgs50so6}(fOpk~FY4xyb%ae-B#mko;82YxLLv_f ztQ(ep^A#EW)8j^gay?A#2w|mEt&9+zRR5Bd7}Q|plq2%jk@fLIEPt!Y%leg-kGefu zVJqR9Vvj4Ltn9A4(-zbX_p2%vpU(&_U2zaN)DqPcD`&!KmWmY8`pcQU8Dy#z(hWdT zFS)whvrq|cz5nSosTFYlcqARfcKJ&}_mnZdC;okosMko1?-k3%9xlA_F&Qa7yi_~Z zvG)ooqf6QCss4&X!zRTko&|glQAk{dLqG5##$c$GU)3SGRh=NkrteN?Rb==NuW1*- zMq5khyzDP!hJZSs@N9Mf4ny5Gxscw}pGlDL2Y2wYn$=zW1 z>VHFur0&WKuc0c2YfvIJBq|ku*bC2e#QO10f2Y5oc***bI|zAB78G7#s?ThQPD*G$9) zD;Ga76<{AS-;=f_>0qt1aav}*@LuUSx`;;&$QKK)j8Sx~4UIKyMz!I*p??V_kjX24 zKE6dj|IQ>K6m;?@`?p9L+%>u(ondqkMd=v7lCVkx0w*Qw^(LKAN`V?l!#g@|WV5Jl z9fTQJ5#RKd<{A&7?l{~1*^p` zLOYFC2F;Uz7YXPA12}bhe^4A$TDJ03KkLwZXPPLiHvdGqC9ESH{=&OIF^Ot)91xsX zSBe^xWXUcj;_-U~mDvx8dy#v)%rdqOnH_rAFQd18f^i;ytqDr2b*L(?F@)LCLMAOT^G$AXWlR@zI)UF zTcbY*oKq|TD1-DYbO-d1LJf+0Yhxz2_Re11^bDuWQHI=;mtDu3NE0d79~XwY4rO<- zzr74F`Qn;PVH8II7Ohmv{c+p4$9&8; z?}*#DLJ%#XglgoQp)5vL)i+wrv&zEbg^R`QLIaCyUM-(Y-q3K9y)%W`k8kN2xJk{> za!aXX!usieZx)6+kH!m{QKHg;#wTvdgYZvl5@zT zj-?IzW0lBbAFdW9%j@42c1z#*XZ5m7b&*0@&8ije>OU#wesPM4 zlK^eAdFtx4XwDN5e#`zdZnhR^u@+}uSw6|t9CjAlraC6|;`B<;DtgS@a=n>2a7#M~mk~+x@M`&`O*w=mMg~a%%{EwzN}!TBFmHbgGZf4; zvGU4Hr;isSF>qjDynN^D6enriTLrI`s20e(1e!eZW?tZERSx)#bQtmD=JV%%tl<-x0RLiV%T*-Tg@pSal7E^0Nj|UxT+~ zXwZ%gSLVZG>Oo99Yf|aXCMN2%%mJIe8x#TA=%jp=y`oATE0)-fuQ`rG`OwJBnIk2X zsGn0D51_w)m=)0~!^*ALPKNegZ$j(lO26ZzC(amnI2agnJboP8p$hK?^DZ{NiHH_) zPn{ce8WVsb9X`EAemJre=SFK?O!}iHt14-qRNG5}#Ax?=j?z}2Ft<=z_Mne9NW$(H zy$&hbi+j~%)kZ_=&cF;+WK4GDe&#&bWUlyn3meY+?ESCF%AlaP+j?-w6bvsxb(}9E zM!cE=Zw<2_npSyr%U?lmH}ERQB|V|w!5WNfoO}QKsEQYekyA}N8Q2s!>7)d>*5x!7uEN0Y}v<+5d~&ijC!tQ-xEqY&MaIiQ7{$-8}k zu-Lp=y@}|y_h8k#_4|9{_Z^oA6s>ki?aEja9biNErk{1hZ40k9H1D<*BnaCTITNdk zZ17@TX3W>I3iqf(HQV9@oK8m)iAILKk#IsF%jmEOaOgcc3x*adOA9H~lgh=F9EUa5 zAa1=kWYL}C!}@1$E@*de1-6iO%ge3TwW+N@XSQ5P_k>)q1vnhOTlTSCt^Z!3OT#SLVAaE zbpJ*Ob-`!kIr`@aAujYer)`wRQ3d0}$xzXPv>Y%;=wH^8h_cFnoyp#URaLaX);P~c zCz2E}OZfCYBQt^`{b{gq;WV?QKq;Gj&SYHZwSZ2~4Ci?#g+1@2Krg__NC0h0(f}WR zd7a1QogOO{3OE0YAb^$Tc@OyTya&9Gpvik~OyV_I!vPaTBNS`a;Txn|uY)FD=K0xz zs(>p=+0>q&Oaccv;ziF|p#pstUYV7qH6k2&SZ0r*z9yI}0LV^Y8Y$gi(*io+!TxFT z-+v@xsGjfU`aj?8zpqezh0GX$5(*sT|KqLx`;X_4pI_NT8_0QLQvZ43|Na#th&S;0 zmOuW_-BO}T76!-~xGX2g4rYp?=Bo6YwQhLj_c~7&2odl^<#290Y4RrTZ(Pi-zP^P% zuWrx(tnT4?goX~+rlF;gvR8sv=X51`s=s(x6SG&^yTvMX^{Ec$_mEPT1A7CxtY%uI zo9reNz8szx74j^+)V$X%nQ*l-&|r=sP0L*>r?gXm#ns|hx|VkjE?!N7A!iPf7NPbdOj*7o7Kc!^QZmv zT+pFfZnydPR)YrPmz`3j)<}D2^;zsl)FWIeXdh`u4wYU`mSAXF-{WHcieWu4txix!sT&2CFe#DDaUo+ zE9yCE&e!};(j3Vlq$?8B=BV!?$~D{c2|xRcW%y9%&(QAh9^!CQBw4;Ax$yN-*QDg) z*DtY(caF{7rh%v=UeX)seU|-E{2wQhP$=CJcUVaJZ|H0rZNETeF|+X2F%~@zJC5rI z4uf*h_uCX*Pr4c<)#?`(sxCvxbL;@wXSvj&huPnKC_pg71#&s@a{8*eb4a*Z4#%Sl7z&cgaJrt5g!2= zzLweXpk7oS5yEI_cYbc#jb68wAfFF`KyV60uBV6BQd@4!3vP?{We`&Jmpzp6$%PED zWe8x4O&H_f3O1#6t=gWA@7ZivlIKLi>5kd8ySzld(0YSGHlE(Q=&>E{k79mz*H%b6 z&6UR9i`~(ujl{Q8lW@b^2|GG3;-ntSn;R__RJJkydF!NGb`?=|ZNAP|k=Xc$%rYS} zGs_GWO<_l~i_@kT&KX+2;_Y#AyFatK5c;nyfXeAA1B$x3*#fQe^^wXhy6I}h;i}T- z@g~DeL0y)eKk7D!dIvJdJp5l$DrO|f)DAJ5+dAe#(mRs92wYR%z43nvYLqj3Y{%+?8fb5A+bhrGD(_1<2eWGiJ>vr1C1z!uKbrLEx6?#CCztt$bNR8c`fn1t1i_Gfr{4OlWG zU&JlsIuP;atNRB`B?|U22rDNS_Lu9@$9XrGUWb@>rwpde>j~eQeAf8&rNiQ)KGD%B z&6f^`2zla2S}8f;hI3T-&)cW|b)cEJ{v|Ia;vADOlWXWj2SalxiBs5|=gzmIN*9~_ zPe%E9w+Hg14DT(oTvMRgLb@M#?O9`muf9|S(Ha<9Srs`J$<6)oxhaJ&Jd4_{+stNG zD^%dXed>2PV8}EVI4pFYd2hHXBe+zo5} zanWr_mU4W)fLCP5AnA9bm3)hmw{)$6b=J65^+C%)^r^?8jn%wUo?-HlPv?imW6!b+ zcaeY;yI3dVij*DO45NEF-G4CR|B{k z)0-m7z=1i)h_IS=tk7b;~j(Pz0N=z%k#)efZDa0IbH zGas1aqP%vOzf=x2sB|e(eVGhMYw0y zy_>QTM;FaI@H2F<#04TBwLLydM^7q5YnSVY38;lbq=3cP7^L8h76to3<4KHBx-1Pl z^r}q1VIsK8W)c_!p76|VDQRy#u$2Ca+6`>IW*gA-fCePT=kSkeZHS+meojZt0HOfy zO)QnUJZVhaM#UUl+U-+pd5L*GKE9D^tI>Dgfun_6?#b<}X{=CZ+2BQ+tX-ztj8y;{ zIAI<<1MMrn1j`-_%t$op#6y1y8_To`jLGYnV2~Jc@ze+NUm z5tpwnjtAJDqABusQxfZa5+uQ@Ufqz-&>rxpb=jTz33(W**qkuscUy|A z9t?yf$a!;ac)h+sU#yr81o-8@6@d$lA) z;FS`sadaU1w5;(b^S+Z5$6CUwOllxRR%$j|UaPo2MCWbo!8|#zxnL)GZe@ybJ@VB9dQr#^#7$AS+aRysAFNA@)bURF`nz8k`7EbX(Csvy3>A;LyS+aG z>I%z#ig#vE`JNXvfsxlFby?`w!t!8#(ObnbI?evr zBd3F{f<5=Or4A!F$D1>!^cU)~;ZMJ!Lr7iFW(*Ula5l!f>2$sz+i28r&gkpOaShAy z{Z&3aQm8S$Z%T5LQ*paWvm))qmO!Sj)w5Inv~xo6a<28=%~1KH4cSn)={XG+02b}Pm1H%LXp6m8YM>+J7Q%hc(3fICITr-`lI>djL85E)ScB z0?U04J42=QDgd9Z1e~=1vwJiIMzcxhQ5ZZH!)eqY7(F`{#c=oyU?PYE!k?#T<6v^I z=D*u`mt>V7&At%j^)&$l?vX5|JTU?G2n)E0a7K^t{E1b!<9r9zD(X1}2f0xvhaP#= z3d0uG(-DDdY@+S}7JYMb^X`=qkTo$%Hf40_zgq`SH@?ZByUPA{j3JPGIE9vx)xgG7 z_C1t~Sk!YXS3Fdcg1s+FTpjiy{ub$XPU`mx*nNv7R$?jWEO=rTz6N}sh}M*S>LW)a zjy_Bg?pJwK&ObfSq`_U%*u-=CBI;eN!RiDrbe39Rn)%Y1>RKS6j zY}!e4`b@tWd(~#nZUGtVAq$B{UyUt?iAgNqn_j`KU*E7-=~;hHyO(v1ROy=UD5d$< z!xuXDeDAKWGBJnlnbn@{tSwQVSleQWM0A2AiMK0^4x#l+0chy)M;!zEUTg8vQDO$9 z{%teRL0L% z&UC1!;7d~~3J1Pya_dq;SO)n%U(5CU0eofff1`~V|IkM5ymt+DK@%EG*o6BCc(1~6 zQl8-{_r~Jygt$UEdeWN9MUr8I`w~&S7uh5{{Bq?4)7xY6Jw0T`i(%SP27$0v*Er|= z%djfb0ZO)ew%39`u=XdF4X_>%pOZP2Dc0iqe?gvd=aHu~69;o#WE2WkEcGHjUCkm2 zae*gpezpA{l3UeLlsC|x`5##qEu?SCxA{`vL@@244$5XgofTfwc2{9-e2QZ zrTw`|^$Un7pWI}k`#l(&e{(tP#}k26H40%apwg`C!Z`$GeNZVAz8+v4f#CnFpfs;> zEcT{j+UC&~P(9idl;N5nv}hlVf5oc-XIh3(+d&;GIO5Bl1A#Yb`vvkbh^2MIl9vN9 zh1n~#^O0&QL~G_^TVH0{BJ!~Wf-H?xA;CMVo+(=PBQbmGY1kM%xD)^h35r^KaM^Y( z^LylfE_y5y9*PZfnI2GjDR8bD4a*V`dXeS)dpzbW|A1LaG(Z-P{d}Q|ly82B2DXC! z{OA0%0$-SG$#^*79iQ-O__%UKd^7BPK+oK-o#Db4KZx(3s%)me zI{h1T3w|cYbB@mpXohb$Gf^Xa0 zhh;U}jGl!972sGWWNNI~&c}Banr&*%w_Dy3wUe;O0hKW|7YisMGAeT8_#8i$ZNbg|=a^o|T~+{$-weXtKJ4BMSPFRJf^sFnTIG-VF?Tx`g8mQAsNU| zcs^G?>@~K@kbDlmpRVwPLffN_Wp_q*pL@H8Dvky2tf`P7t-qJizbHyp^IRKlwe(Sy zZ3jQ2hh=6`v|qf{tD>s&*!*R_RITZtUsNk65Z`1*h@Vmb8(!%*pp!Pq@5zAtcs#Ha9(a+wxY( zPV3T;m^T8~XDCj?-MMe;{U9iUL7>aD5%AS~Tx;N-VWjEZtr~HWdycC&V*^&ovZp(y zv6x<9pAz$aT)`SH#zQyJvDDM57!~(UFYN&OTLd`uH-2!KcB?xTp?#%>eJ6ovXc7hd z6%qVB*r7=>+f$fU2H)Q%qpWmG(&3|s8Y!)9?Al?mk+%fO zAKp@nQrEaCdJ(|sQ{D%lRBibtD8VHTIxaQ&YlJJWtcPHd@4I_gEarxiy`@vKnbRF} zba*Orb_=k@nMdpuNx^aU1La=f$OpQVQfQH^JMWegia#Nn{UsGle~-Mr@ZCImSJM)V zx7R)!)`7ERN%eyPqvIi}hqg`omT4y&tZ%6P+~%v@R0m>a(l>lRjkOFXU$YfFcM=&+ z!&8$wn|7}Fy=}l(L(8FQapCV=;4^z_$88~?AaaY0PVaZ9O0QGSaQ0~Qi>lS!jM^-6 zRMQ(h6B`Esku*^&$Bw(DS9t%GbSi1DlZyR- z5!n^gMaNM2 zJ0-I^8WRu~9HQA!o9IWlj})-fPjBifIJHm8w;*OZvo& z9A&pUp>NSTqNIofL7vH=_tD?bDMLlCl(ECYU?uj_ze{X%i@=ouA@?}N4BCTEu6zfH zu3Z&7qz;CQ{UbL4s7HpplaPD4uOoB!{-fr^hdwE@OmHHGr!3^fnmur)*T3~xy$%fc za3^L!=fK1J;2o*7=XCoAZpLuG+NZ`>#1cjm9{X0+#^2a$hGyi9E{r8mj4kF6r)Gp3 za*X{B=baNY*eTeti1qAtSKh%E7@p|j({JYj7MI8CM>dx5y;pUnK~2pr40OIe=rcVK zcHt;oJ6~AmBmm=Exd^`ACoCe9D5+R7+khKb9Kh;V?ObuIJCkpEW*8lu>+}%6WjF~s zdd>(+W4ukT{kk5K;TdkT1aZ6OOAGM;L`*W4&KH;A(LPQn=taSfbse|6U_1FOFu0q; zZXDp)^Qk2~0qUHz=Sac#P-iU6u?=BNxjfFK@1;W-$Sbp4gQ+FJb%}yC9l{5yIe9M4 z^u2F;CE%=oO`WEfM>yH9;FNqq&PRi_b7cOR+Zs4TWk@^rbrLmRMNT`ryy{P~J!Fk? zU<*8bsL;XpTCd)I4UWmokCKeIJAXW#tS=YGcr4s~hSzr`hEG{k?|2KodkdLwa?q3T z4LZAq58BlAglt)2`R8V1(!0j-oqVX%@T{QYCht6`kE_e-IDOln#Hdl4M0$p__-&FY zz*uc_#&>BYI8ud(@`6x{bxv!pdU(H%M~&z@jG8i=Mz!6*kRLy>QyAW-R*t>u4-Ms^ z^RS#CFYHyPf#j7=u4$MTmG0ElBxmH3bVO{U_^U}^SZy0VQu|x3It^(fiXSDI65dGG z6IkzKwViOx>L}gNtTFdR?4Fp*psfYHW4y{>IOCtfR6W&2qD$Xom|Zox2f(uj3p8}w z2Y!DVD)ycJGT<(@zYO@gQQ9Yl^C+95iMKRL&~VN&Ro^Y$!;;=0!&eLb(|y;S?{6z2 zp9xN_`E8vI$t`nyrBk2CHBKM7;PY~2V?6Jc#E$G*Bgc5}!(}Djq`xwri7O4_MQOT9 z!k*J;U16Nb*fuK8iK?in2Y3Dk5B^Z(Jn&^g9~}k+*oPR#kQWIK48GB_!_()LAFcL! zQg<|}clzRhH!DO~fUq8%YC@Ds3D*JCaCT}4{jzD#BOr(z0!oEszH_&FOC?V+8U5=p zL{PkZ(p400u2%P{H` zjKHLWep)@M#I=>hSf=DybIxLC87KK_nu-Szagt?UZSq^p^FHkdvOvZM-`(9BXGdHa zfEI_(!lnJxu|h1Ma$;II*e9lv52I0}mp@cYagK1SK;Kwof_Ngn{k17!L)5>~^8FfZ zek^26|6F@)Lio}C_pKT#EPU7u2K(YYQWu4{7-&p?b#>uW>65u^nTAu}tNHdLE3Yr8u@oHzF z&tl%ao5q=tNbPhJ-`4lAUC&ShJ_M28XIiOnc!pS7{pmAymIx^x27)D1x~E;}Eq)>> z*MSGw)~4WgA_iXI&Wj?}ATb7Ay%&NaH&Py>#;cm~2y6Az$vpQw!dv^;7mDcurYP5Sp?&1gK#%%$Vf1e159 zSM3#A7~zoue3t>1msQjQ8RKR=1J2jS{91Z`rgIrWO&x-Uv!n}}=IdmSrYK#Tq6Q`& zGq)HOqc5!LE{^Z<38Hh9pQfZtB-hfroUXh!DK(43c!kSr+c-UNm$~^2XIiDd(Z*!( zgKa{5$41(y%;%e{hWRENUJjE-R&T~lnrx=DDXb^Dy@QJ^TiVbHbT_$c7(tu;FC;g` zW@3&s)_97H-v3Afffk*R7*8W;dIKgX?dBE2kZTXQZ3`uVRLw&Mmrf4oOZa1sL(m8# zOLLd7T?VhPck{9(v^acQQIHEsKu}`(79rPUXJt7mw=0&4EdrdBKxd>wH2ko$BGjSk zJ(b-vXx!|yp;z`b@!8cUCOSJ^)tdBqB*Ib@^TROe7_1cz6$fo?Y?IchxSMEO{m)>`FF*aFESg$Icz}4&HZrEw*Atn>A6yg1ZzipF}wzP?~aLg5UH@fy61xMsTk zmd}Y%6T<+Rat6B*3Hdr-#8vhZ8P)P5IP6`Jlhu~w746QG=G1bCL6c}0i1-*<0m=ax zB-l|zRUHk0LLJ6%T%y@0Gv3X$WKpT8HA=C~2_nZdeb$pdQ@TZRyzSyX({#3I)>Zrw z#_#j@a^QpyIq4tRd1nep<`3SzcML6%H24Rt6vW zzG+6feVA+_>235oxTs9bO1h#)0BL2VS4bJV1pgjj zsDd`;{dg^k()v|R|E#opl2C)A;#PJYxA>7&nd&Efy)U>ny`>@Mt;r0Kd@-Xp85P~i zndj2Fv>GF*&B`dpR13VYT1(X|IOmX2oKM+gf zQaV+Xy18WpB?c`X$kVVdg(o922jkBX*M*|IsolXdE?V=vAz+O6MVe5(yf@ zFAaW?(AnjrMvPQ@#{hBgo!XqQN#4Exnj0da;Kl+LtNn(k=EHqD=O;%xjc6Kp{=f+g zD6b-HcY7m?k8CsjT8n_qie}LxQX<8!Xy+SRmE=sVF55RQ5ue!YiK)L!_Czf z&dRaX`jnO+7&{mZq`5H3Vxcr*m! zy7H?ybczU?YuMX?kd+<*p#{$lpD})i`6%Y3OH^Q_VI>5zNmrFMxQVtlh=Okf9xtF}dwd@p1KIZ2*i#Dyk240?eu%x5vUt)F86}CV@PDfS;Ea0D zG(?Q}!t9hEgVKMb1Mh#U00_aRn95kgGIOTl{w6mFel-;?h;?zqOAXkMm6HC?ANy|( z|Nl3l|F_KG{`dXA79t!z5;p>zd+U<+m1(g`M#~kLpFAFE-t)8?bC6%Ue2qowpUkY)zdc?| zDPS!Oy)72MWSdm$&KrVfbQ z9bsNxtj3ymM-jKXGs8OAdX8QAXV!8#w6wIxuwH)v0@_-`K{MC6E-Q;pP3p-!dM3E<_ac_OPhdR( zRvbJ-m&)E6QuuD$ic)EdnVQ4^E?-&?(uO+Pqdg64)b(%Y^#dv2Tvx8=q96LC_U+%M z);B^v%uu8<)n(!zndB&Oq&ShRz{S_V8rv`Lh z7;~~F5tEaNS_{AS7;X7B-UA)OR`u)?tDoM9K&isOtjQf$SxGYeO}}E7!)Vh3|H&j9 zBjuqu6+4JlJAmafJ017Y4}d=RY?8x3XJ1O|?}NofsITc|J3kKy6&7cG^85`2EVQ^n zp`hUwG_N&b##&nTEkvHaD;AHQW5nmZmG$2 z*rxoOiB}xW%nF&Uf4#CGUo%}R=ga<6CjCw@oui@7`>IPxD<}^m1KXWGIeqHjAZ4HJY@#QN z7toGZcMBO*r)UMgV*f;(TMpL4d90rr938NVRtV?^j28ExPFrFQe_HKJoAeyGI=!^; z8upjZH$1?%(EVeM2~J7V9rg7oKsvp-EO*|Ct1JVga%OW7$8n8hmpYuZd`kIil+Jn> zZKA{2F8Z9E0Fv21H$7$&Tu)L{PL^j%TfIG`Dwt>kOKYq;fDTG!4Sl8=-(;&<1hM!J(( z)noEcT_#mUK`&+LRE)CB&Na-E zN-Bt>NUoB@*Y3KrfT`JLQdl_L<9{Lbxs~<=0T{0 zaY-Kup;W?_W!lwmB1sCh`>j|LwiW9z7Dcq$c%Rw7x*K}ex3wVtMBh!iQ3Rmnfk>_J zrZJ>5eWt)Gw#d}!=;(~&wP3BQnKI6|oh(*AZ4$ljTy@j=^OC0xYxmvw+{T_;srXsn zyqND5gaa>qI?_Rsl6e|tv>ix!#wFU4<8!9dILdHQJLeQh$$6ADgosKu-5n5Mp-P0z zql`DR)CdqhJwf^b3@+<|Wa;GoPfRNCt0M-Ej*g8=0Y2$Xz$$*C*j@fk6!obFHj#kR z&3kxr-iQb^{TMN$1S>XG(V&urcdOB2>~;7_;`@XShqyz_GZinVZEVk8AnyVbn*Db5 z^{!=2ckCI^lCezcyJv+{SL~hieaCk1Y9gkIJA$>~@x-;m1N(yJ{Qle?gZ|8HoTP~z zg@2z6=j#5%)Ah^9h)wz&Z-Y#Y9mU;hVlVZyzr+G$ixd<#1+$_^kQX{T`8je5O4K#64_@1sFR|&Et$%{24Y%&75x_ z*&tkEE(%wZa;~lX)5~h0(XbV-j{(YLRGrRpbW-obHoMeEwYG1MS|5oK7#&fKl5qXO zYJusPvu6SD({oiD7?<=9((zj)Ggnc zdB^_)*DY!;k#haRLMYi)uZZnsc!8?=C9Ed<_0OUN$S_CbAg)2`H`5%fX+5So=}d~# zSpH`VskXBwot^tHVElK=ca!D&{P1Uam$P~6ir>36{dkE|9_`ZljS6N0v2?b_Mr=xj zLHV*& zH-4})>6cgtT!0CjDhO}LSA99Bv;8kM$^b_XiRqP?NZM%#I%OO+GKO41&cM%MkXeY@ zPb0@|hI0NHR9~?cwn%F6=fj05-N7+;HRqh?1x(@ah|G_yUt#?TV8+qOy)hy9w3IM4 zX@;zjbXF1|(*Oi9WeOjj_Zi7cy|Cz{47_)|ieAE?aa1rq-k#yzacT&%(fIZ3;+=&| z@w3g*`sJ7G-(Vvs{Y!-Fj-iKl-bD?;9RjMeVePtK^aNN*Z{gt(<7;OpOx_2evz8i7 zQyvPFavHb8i|h4Dge=v&!CaVxT_3OVq5#8UW6J)W)d^pc*U==#5}(6Nc%E^+FSBtc zxKmOUwLXsdS(?nF6DyM)o=#5Wc4o{6_k?2b8DXN=|0s_Nu6)_g|{UC5f^w(DEYoSWM-*j}>-Qb3J`-P&)GBBRkS zzruH)A+2u%lWw))AU&%X^gV7=6qRwXD~s^O(j%@&z-#ZS5!r=kf=OQn{Ec~ zTpQOTWf3@Bw%p*6JZzMCJh#Ak45Ng*nh z+Hknvg|tNTn<4~7OJo{5ZHBPUq@Z}481l~a>sVnBUlG}S z#H@X6;CJh4`uJk9#f?s^Vln`s--4_|PEtP|k40QCvNM#TGe@-WmpGM21pmI>pG1$l zS8cew9WWVScZBpxWam4=T4gtZ^lRsf!)5#u)*1}qMA&z*RZ}qg->lO(^z4tDTCME| z2^o(pHXGBKj7d}H>R-A4Lbh^P;bXzIyZYB<*-q48~Kpd`~do4lteU^*Ve&Pf-GKwTE5fs33Vcrl1t0x4*5` z&KcpR?@clzf0uLcKoyTueR)*n{*ZZD@j~`Qi)L9;YJS(HUVBJ=m{OP*_G0B>H9RA^ zPA6jKx@oP0ot$;`ws6s)`E2fmmKzTOt{dFGW|mft^wm=X|2ih?mLw&zZ@Uee=;X~I zmvfXhoM~0uWmZoKYXpPvFOt|PbQuk7Y!Nuq`5_$3&3U&`S@2L47W(xrju}POiV+%G z%cU+adr1Kn&W;!$C8A)kz>=l`Yl8Cqnovw31|L{CWURA#=YTK4+nZ%%HRs+gQ`3W4 zj4*-D63>&UZ6XrBV-$tG(p-L6_bL%S#P_2L%qDCh7H|N0Ka*DTWmQQ?6S(`fT5%%@ z6G`Xnd8|o~JmZM;g!OSqPw%QHEkyRNpDUn83DKwf&N%;8!~TK-I~V5t<3UxIG%9b# zGxRO&EgVd6UmUZJ|Ff=?7HpOE6)f)As(hCVio z%hmM6`Z`9_khi{CqaR3Ri?ytyelPIzTTvkjy3d9%^+seq$v!`aYR`NZW%?!?>ARVl zHhks{P^Q?F6z&7N&mUSB<*TKcc;dAwue@^kkoi=gnDG9!PThM%GFK2z}**|2e^up=GX2NQ^&e!rdxeF*>M8B4z}#2 zQKq zBzzPdFCIFW!t>1y@wm#b#L`FSpsR-BQPYDvQIv-_g{_;5oyz?EjR+MQ4YS{$rHEr> zZaOFJ%Yg*DSEfFX;Xkd^ej#l>Vj+7sWA!NV)c^8&@sC}=qN4!yYJ&dvh3?j+ z4_&XB?D$PbsyPD{`(dWm38WmDsZ~$3#3ScIgTE1m&9!O`@xGGu zVyn_dQ~0SdG?77mn*+IkdJn%bKI z5A-cwrhk*#$`c~Um2eabr&i>&vj*o6v~b{WwVh%SzxTHqltR1^bgXPxFy-i~pa6ze z&vV}9V%pVkl#o^ja`&;l$grlxemE)N@fAnHNZUJ>#ggT)uS5v7Nq?4#6!PPs9G>p2 zR}n)PmKp&mP0GVmauY5V|Ejbq3Z_+aKcnfK!K04T2=0hN(qNgEJkX z0o)LN&wGIUQ!ArEHLgxtd(CmfMPAiQ~{Y!M7 z>JB_Ou3TIS9szzKwMqVAs*@3G4j`2#jqjGEU0AeW^Kz~$(KVzP(0U%F>-zfp90hgg z;LlSdP8VMGSrnA_>L16%AEb%WLGZK)0}|7PEbtwfQ(EIj2(@rmOfOVJ;6L6_gl|qc zJ3bW86)$fse{ul`o?; zqRzsh6-U|zrMQ?Yg$B-nHe(g3ZS9UqDV&3b_@QY?a9psmtkL`6_;gp1K16?i8=zzq ziCO#uaXQ{ThE{I;1YK8?5k??q*zX?iSDYp_pPS!NIJ=Atpg%_m7se`SHbY*kTTfrt zF);}`hd)P+)aQBgqm?9M`__u-=uQXjk%#NIX-HSS-51qstJ$B*k{|z)oBF?J5Ku7J zaBEB7)5hcK|D=tY7oDGuyS?UDA~ouRv661jbtv>3UwSjgW!H-QqS}c-Tb1ZanO6RA zFzyqKzTGlL%|n*{s*ecn;=uIra_BgI??cpGV7=PfkI^+^+Wp=9G5;^R!-1hYRy`QH zD`fLsqeSKjRHyP6jqj0LwWw$(Me0hy@89Eps;vznYeCpe^XNiAgR_`y`sjoF2<;V} z0lhg%r1#i=g*`4imQXZ{t}s${A`Z;)721aBu=WRX}?TBmCE==1TZ zw&jw}Msg`kP^jgJgEErGzBvqo+YX1c4IzX$w7RR(4caf#&|CW-KKvfQ8I5n%8%OD; zRWNLWMTE?of{#qD86&Zr-llP6DRQlYfQHi}NqpXUmFRPq(1i=_6GU|Eg4>LF2xR?K z;zW)fb6lDuj()FFY1wNGuES5GQE-{TdmoCB--@ z-%r$_$jxMHv&wb@YFxPQvTn(~6LipOHts-}2yX5llk3ZGVy!r7A8ky&f32D!{)-7= zu3Q-unC#^cCVPQdpI^hwDX+On{_8)X$b;~$?f_{Y-q zz2g#G((?bMW%vJ)2mW7E&%~bzwmXxum)q-o-{Vu+JofneHxl%88cOf&y4{imBM?=q z0#7-)o&Ne2xaBIxyk{f%jmwMxA z{;I{H7>^*yqqxJqYz%3BIkvSwnc4hwdpsd0hb@cW^;qZ)0GE~EKGMFy!Q@i?hAXnf zp)AwxsQ6HFUu{GT5(aR&q9uQEX|n4#{RYhxHs$@xs#R|L1;M(*b~M@^FDwI})A83H zKE?tXPrHSnCq_NYq{AH`UzH6;b_#&i>v$;;GbC6pR_)%izH>jp^k5T=_}TRDE9X}{ z8(V8LZx$3H?0h7euL`5RxxRhptNrptB1Xtts=%{w_$_N<^W5O>@Gx7dT1*zncB47- zlisHXZe z#8~TpQCZDFDx%0mnzvC$Rj#01!@Zy~qX&)C&w@Y&X!V6d6QN&NB3Chk$KULkZ8WWF zeA5Dr5(nx5h#{e^vK&r zd$h6OdE?rKiUds}d|_)9Wb9jmVt@ZOpj)oy*BGnvcAyt;_RGd<+(a$dcPBLhIY@P? znGHT9eZRuAryuy7SXyrP?3v+I0~cYvq9Zi}%fS!kp5yhd*1+WU^+yM=2tV0L!bw9d z&%dFCo&Y_DdD?e4us}>9+-L8+fqmXZ@d+zv$^=BB3s#$Q%Rf4Nu2n_}(ryvilJ@l{ z(wdit&ibD=<#%3703J;(ey;nb<}^nH&KQq}mi=zZ-18ugQe04em8WjMerF9d(|+43 zp+vE<#Jh)hkR`QBglH+N!vkhT1Y3~;Kf_+g6UOOrWONFjqZS@cb5Cf&;~i*Uk3tdl zu3NHH2ZN2A(OZk>$*pGO=j_9QIBC1Fku_gHAOUwQ4A*hM^b?BFNxKp77Huot$8Dim zj{#x-+G5+zVB-t)eJRf>jXMyBeTLo{biYQ2yC`SzKrPAE|&| z_O10L4!Tx@UAHp_X7Y96f}Si%8+}?K#(RXj&WGBrbIyD}+c55r^k4pYx%eniJ0laN zwiP5!ON~$3?6j<&N40}CCJsJZQoF8wlZG(B&=&=HON+o89@5+C&i@o}tmiO*Gprf} zyMvkEvXjRukj0!K*VhT~#{uq1J+&eRCVvlr>J_}Yy1I_|`>tGp(Rcvd079-6wHjpD5;9c^Kfp5pqZ@Uw!7&n^FbiiXiylN}Na$Qov~Mk~+2>lWCx&!z z_XR5JmW_VbNcJ^|&+G?R>#oq+GH_|80#jZ3S$P!jv6(^OH-d1L*fnvzd^K{k41KWj&+*M?cD|_D4j+C9pu)MX1y*m-7h-%lw_ot-g;JSf1ez~p~E_(sJG@YRL zfAf+Gv|%FNoj@?MfQLDNvtiP}D}CB?l9Z7lixqVf1P|DT;c)F>Apu92#bl1(od@4W znyG@}lyVJ6FIGS@azLN}cBxYM@jq_3r3*W~ZVGvb;w><5<6R$bJcvYLb@^TEbA5Jn zGV&cncjXR(4_S*&@q^iwLLv9u7KP3|!3YUjup%oV zs!nP2mUbH=O$wa+=->c8m)HWDm5MV~-Gi@1=BfwJJX$@G8P5}8_vQju{dZKWq`VcY zYpiv?F#pN8PIZ%Ff&7;ckOY{Er_R z5*?Fua6x$jrtk&0Rp<_|2TiB8V`_HD&Bynq4_|;C3*o#_0$5k}Ir{43L@UFnWoeAY zWW5n4QUU8C(yF8|pR^U3-UC^Lr}PPkXSXo7*##!KupWph;BhMmZdFm%*o%I`-CyF^ z?kJPwxY-DD+i-}s>i}(doNoHG;=G*PKb%zc)X!Z%A257d#`MkJ?7W=&>=v^}u+^IZ z79vw9B?p2dJ?dujHHuG@uj(C5h1yU9^D|oCB|@dN{{)K!`S^G}OPs%EJJIuV+l|8C z`U4LS(kbVNP-;C(DC1Byqov!#%L7RKZjM48%zSj*q<1?Bsl{_~$CwJNc`g~3xoASdg2&Zp$}d|NQjUiJy-8;qh;5AK*=;No3=@b%fa3!EIqCtn(}uyv4ia< z)L;MZCVdS4>2p%e=}&aa3ckckdrN812`{qR(j0jI7}xW1h3|%|KAffU_|u}ltHpQp zs|XaL);A4y>Jm%w(q!RCy5b}^@P1kW9qGy4=j0XeAs>BOG}ib+b~PEw!JP%qd#Vm# zfwBZiU&F#c`+i?~zeM=7Ei%g;{&^Z2e;{)x0CEQb zXZ^=dY~pcaGBvlJ=yQ&M=t>gaxAlA=tNg;|l z&!O0eF~Y)iR%)H-N+}Ph7Hr@sGhmw@u>(d)vrRYy0!KVE$AKQ$T2LxcOz~akBxxjUhfkpU|sOnBlCP!A%wm}2!5|& z%k~)`<$k~&T|^VcS%X#5{3=T>YT{LzO9Kz$%6&rP+j>`XQ-MVI4Im_m2fDYh{EuhU zrK>%$sUQTuPp>eelY+@VoPWP4N}LBpL0vFUSb7@rr~2{zKBfnT5%NZTP7_WIJNC(+ z6j`{cPG?LnuTU={LeF+pwF1%Gh*AS`rELo54Q{R%zxTfDojv)THC+lcF(4A!)Np6D zpm~s^hwQmowu?=R^Fy&JwLe|hxmSN0N0(mRQ1UzGUzU~NS^cdnBOADzTD$0Zk?`p<1@i@w zS$czZW4-2~7pv%rr@(lM!8Jjot6U?@C2J((tcb{A5+A1FWa@1JO{2_zO81^j776z3 z)#R=um9nrB@01UY5dZ$sEAO}P>VLLyFgw=QUDwh%ZdWDpd}d9E-CDhis;I4r;5V~S zDlQ0FeaFJmM;f;*0>!cXb-ov>(D{!1)ZNKzB?&d(yrBLp)6|$%Y?lFdODO$-Hkn(a z#%9{2Qr+09&9)!b*j2|uez0#O6Sva!fe~y*AHyU4^Vv@@uq!H!+TdUkP!krG{L`-Q zVQ1PwPSu;0U7sTJWxHMbXxZ2NYj2J8aT8D}{#$=Hk{@SG*kS4A?6Xnwt0jx48Jy-3 zR!G)3Mcz8^M)6CNCE)dN*SAs>aEK;4{L?5W^_-(CURMnAbFzHt{qPL9*nfi_xN1+9 zuq0`y4FEmwq&UNBRSIczm|D;?*MNL%0*lhY;Ib&_?Zz z=!6S^B1Hk%xdOaH+d>1k==6zP?K-<@}r6ndoDRlzUUov`{WSr9JcfZd@H#Q{=! z<80<2sun|;j97yENTBCd=hE5w!(hyDbBWW(CvxiW&su#SeHUf_2oEspwSXj7|J0y9nQTj2tI0xb#4}x{=%!Y` zWC!Fp971bknoj)QHc;IC5ANPND$4JD7lv_YkS>u9>6GqH>F!2C8fkFo7Lb(g6ai@v zhekkAP+B@fq(K_rJ%0Sg`JJ`i_5S&u^A~Fg%M~0;z3`A(ZFa(Ye5?w zkC(<67J1)wgn;`>BSVzU@QM6SENG8?z6t|3bE%=@f{RIQ{oU>D**6umrU+AJEqFT> z(V<+=ho683#7)A0o|q1pd)Zl}om4U3#ve?p+{bp#ZVL-sKuB_HNyP(B+~X%2^Bf_4 zLQ=f3qG5%!rf7!>{i3rzuE4Jup!O(yvmV0&u-GsM*71}9c}Zdf7&eUhM<}8X8pjW3 z9nc+&J&X7*qTvCGqepXVA1S9);_Y+Z&aUh(?Kr=FL>ld>ku1O|+Lpn?wgi~U7U1OO zib1Q&iZ$se!(@x1DA4|TDvch~3dg*&?XkvPE#d|MLSBHA*!=PTlb+4xcg~3iAC2K+6=8oU+! zlX%6=joa|uMl`xjtSwG3;F{aXFe$>Bc$8x14keCtCr)(BHRCt~nroxZw1 z{`a5268@0Z%)uFf@b=TJ0c0ATnkZRO00APJNAO$_Ar6oOgv|5*D_V#i_P~sn#ZQ?H zs6_t_87^5MKFae~h@$CV-h~Le!9O3i693QVM2wyPZ65gdSDH{KDB=^;Bc4p~2@p5! z-@gKstv^7#N-Ka|yX zerdOUa7~>rt5^@1ud6jOpc&XXw!8W@vzU871(;+bfV_v5@AQ6bq<2OSwF@}_Dc#wMQiCik@+$Yt*VE==8`5f=Afh>n+b->;C*G%+?>D8U4rUN+qLyyn{!-T zTufByJXm59bX#PPC*e36eE9#O8VJa&b_UoAg6Cz_<=3$7yVM%hlPDJ_Ka`0`}1 z^Bda<&-EgJz)Q`VAPPr2*3NyjW|9(0$KgTF;$Vt(U~RyjM?8x2!UejYVJbA~rJG zzl8OXZWD$a*LS9+V{ft^IPuH9|f^2Kq^^j>a|dE_my$CrF( z`eW+brjhuMd!s`wc|r0tgnhVK4z+x`%LL&I9rI=IH#6tTHJcQ6!`)bHM6cLBW(qFt zbLI#R)w2G#hu*r8I53X1u9bOoFH>n+y=J54{gbjL+Y0`Ok&zK!-r^3b-y`p5tz?cy z>fueUdhC5s>@i<}IhxMW8@X%&@zJrVS3YY~tiN#naYp=-=5V!y8wEgBQOZ&*Uttd?$H$Cj=;;N2 z4E9oHmUeWK85vY02{FcE6*c%deNJq=lW00sMkfF=`pcC5+HCjwGQTcZ z#d0Fj_Q$EqF;(iDk0Pq}h)m@i!AyiB&RokAlPYT>5!2hJdb3}N0XjR|e*7OD!7=-n z8q&QpX3@8*7HplD$H@{5P33b*2uv0KuPtEQYhlGMIL>?VBRPaUQqep%9d}C@%cRN3 zpX>t}0d)!cxY;BbY$1=!+D&59UIi*K6XVtsUw=LvlWr=15t#|G$ham}`# zas>{)h>NMIEl1$1I&hEsz~;2ANbWISAyVsaoC@KhbQz*vz@<&~mg8 z+0$Tsv~ig_z?Z&7n;pV*m0t<1+dJ=}N0cQbe{gtx6#U&~w*JlZ>nlmf8X+sI()x{noIla;f~U5FnqRU^m~c1ckT8v@F)$B%`sFbfj$s1a@xr4Qk1L^GIzy01 zAc8Cl;Wh8g0TR73Q|J|6u2}?ZGs-UB9z;tH1H$>!F=z8z%-A-@jtqQKzC790fE(QvSXUqfOipZC42k<-Ww$p9;(N% z3D9NI!6@v&g}yq5NsR^UanKOTM)-x$Xd%FIyc1Ux7r)!PLd!^Pgc182z*SF_$n?2}^?Xv3uK0eO$`A0393$O*|BG+- zOwPy9`2rUq=jpNe%kXo_=6j@a>ldB{PYw%64ILaveYbV{wZ)7QmM!omGU%5c`)OnB znb1`H*?~5tVgr2a<-D52ZLMsVM)chrjwi;9`w|K${K}R9)MB&ywU!Sa>1;UC%qf1ZgBt1!Q!AV&5RVAuo&zcAhgSL zKGrGy_7nt+WYE@t;7VQ|jEpuWKCqPT*nr_fCIutq4jdfZ%!V&%>Oo3Vi&i%xJFFdK zKrYnf?Aq>=nn?4WJvdthQ%1MFSzx;R2@lKU`4xupIY6mh*eO98R}MC{gqV4*i=-JO zeBem%-9@4%TGc1o97C)IColl|Ba%3F8K5{8Xp@NHJwu%udHZW_)KIL!QWKS>w{hfV zU8N--ZLUAn8wlRWi*brpyYJH3v^+;-Vcj-uDZcHtJyhH9FMJJ@3>)HB9)OdAgs7;O z(0=10A^rXxr9nmVFX!8zW+=JDdRHN>ftjWqovH_S7|K$#8`j>;kMF^IT^rWitg%=L zAav-=9B(7MhkExKDS!Ka+`x8l*!ua_*Y&6T;&g$i*Vb69|Hp;Vt6V{KL+i;UmEk)V zr;~=eW`MsQDmM#ORMp#|0+er^zN8;GOxr#ce9$*E@mJl_S^WK0LD!IB5O4ADVO;03 zNSsntE#;)ai#e^3kT&N1ImZXhE>DNMTI;!U%YRR$-K`jkb@ti0Ult#M zL$BYzEbYG2l6`@Y!SDVdV$HHN)3`Wxl1zhFkIIN^oU>aKD4Sne+nCz$a|QSv%?eUh zuAfs(m&`wPn&AG{QvSkYPc&JIFJUXg^J7eNgagcF);yMk(@APz=!!~!JF!}KB)t{& z6k(Y-IYb?*hI8*>A=kU>iI#mZbo&gP_T+%)C?f98V;r!;RGy0+p?|G4dQn_b;t1@R zy?@`FO@g7P+yzKT{60wGR@&PuBLYsgZBPUX%zqpiDXyvOh--0MQU^rfA~50#V>OUC z3<2|VgA-uVqq+4l&#^ZG!~QJ@Ec^t*l9Uyb?iYc{+|@LY*QiKNPL2pL1)-ZAZRNM^t8r|V7Vknf%fKMu)2r4+6#zq= zfI2nx`biHC!Hbv}^j^OmFv*q-LNymyj{c_PJF924@HK^r_8I8Sh8J+j{ z6~Tqyg10LNG#D+=0&If=hHx!8Jde-et~jvp(ls?T-4xF4;(9#&{)%PmHR$kHDWQA% z*^;3W-+ZRcRz<_l9*QlT=4{*M0_`5balC}O6}{I;SeW3-D; zSm2oZLtt!L1u$579dq;iwuhkh>i`E@ zl?w6nJBlL-fA7nX;_k^Uuds^A{cx@|?;}xKj}3ZyBNinCKAVFVo}HLB z5FJhlX|}PYwkXe~kSJ!+p|1{V59RNQN3WtK(qekul+@f+P_&dXxBvJ=4ec&d%)E^a zmZRpv5GsE@Sn1nP^auhY zSx2C_{!(ux`x2OX7(E3_s0qO0s{#_k6NLR~Ty9rS5?o3dfkR=$nY=cC`yHUvFIsaH zMIkmM_Z|RIGqyB-bSfH3Z{9OoK=^3EMwS(4z6E<@F<@e%(;8>30fsZU}IBJ{wQYxh(uXC4mW~R+Wd|~!gRxhNQsC(fwNft=ISi-xib|H z7nm?|@Jp%>0UedMB_m54kdnQQ-KR_oVHZ%k01Fm{7Ofoc`Zz&CsTxUoAok{&G$ncr z$>ut^Hmjc6+5~1`oq2;HO2)6U-~}7 zNTA9o%p`Jf(E7MOUitXerI;@Bl)fuiQKjvd1ZI2;J3m!A9G*%*VItSwo)T3|#a5$j zZ7qTG^Gz%Pp{YLl!$N|r;TVFr#8IxVoD%TMiH2SCYM1-8s`_7weJHdC{Jp(-@+1S& zg?x{OFkpw?x%v5rI>K6$U#&2o35t=YVqn0EC)&d?Lo``f$^jaFg z%)y5)gHf}9fw$bsq2yC2!dR@gI9zWB!EZ54_#z^d$spAXuRQZBVYVFb1^I)$VG+bX z1fI-QK8p29W@i3cKZl^dsI?1{T6*+)$qL`uK332jC$W5fKXDPaz{mC33k&Y$Q3kma&7(gjzjaeM)oUQj*{U8Rfj`no`!wqP$^#eoU zOsJ~y>)dWG^(Bo2tbUaBH(*A4@=z#8Z}edQNz#8I!VEO)8(8-UYyO!w`j^I@Lc1;~X* z;fYTWJKRs1Je$l!EZ)nY#USb+@`}kN44>Md5GQ&#R6+8$n&ruiuA%ZuK4seRO1y5P zR|T1@;iP?<->48~{8J-*cP&8mhV`lzyYA9^2V|N>)fiY+S*OFlD1G3q<;zh`pAR;C z+bzOjVKmP!a>c&I0RMa2CR;WnM&2hDe=yN#lkj$ZmowKSW+|a6pX(=MxnA9nhh^mC zRITZ*$0#E)1nku!192sOgNxgHs%ZA=dRH*;MJ**P1ye$Q05m{+v+`9Xk{AiP?4OY@ zn^>dU^7Hf60XL!;RQ>p-F+uo-#Zq)MKr76;HlbraUu_LhC1p3y9|2Q-1u*d^1%*~3 z;9}{$nFF*1bwvDhp2r~h3Btg7x-9JbZdVQt*@H!97g95C{3o-G^0gv1U%#m@(+OGk zqiaQ+waZ4|?M1=gPiftcpFAVXbDOD`HpK9_Yu5?RJ|W^GkcB#t#-cN zunxS-J5)-L_2tJ9bF*}r9J;TO`xxesMlN1fXp3I)MJPXa&W~wltgo-q ztwMfnGGsv&2H|5_lM%mmeP4C=zT~qW?$Fj}aU0x!9=IX{v8w?Ljb4c5G}E;iDD9rE zbcYkW#^@4(kY6>;w4czLGR<7DP_AfWTA!hmi49C7!IfI6cAOgLUW1!-|4xh%*c89G zj^y_3s_Nm5E-d$;v^n+IVTEmd2RJrbvuSH(9ESec?rNZSV$~E@|8mold40p7W&2j= zX-;Vp*$4tJGQ))N&}Gw?e@8uAHTlRr5}=ng7qSZ z>W|~<%k}mo)ljI1zpZ*?MzmtT0vvL26+tBT-(E-vQ9igl-0+2*8j<~H=ZoXw3A*Lm z>kMP2k6%{F@avP^%+iI};H(O|H41ykSbAblH|>Ww*)SW`p^CQ5%kCQQwmN>hDT|}w zR!lt41hBx%Iv*b=>atr07az$Pq;Iqaj`;oY>7k-9EL>B6V1uHHkiNDJ5XvK~pzaN+ zJX9h;(DWW87XtbrCUvmK=Oe|-y_yDc#J~q#B#O=tv@VIemwGErHWZS1sU zfuNYDL+xwPku-})#bSe4JL6g2fK6k1EhAV@Z8-#mj@~TJG6iN=4h$i}zEn>=s5q{Z zND#!NAi$S0Qp6KsM}68D`a1;wc?7R=??3yMFsI?Y6jM4@R+XRvJeMS%9+?M+>1V6o zy>rzuurDJ<>51HuIhJ=~!PQ-MRXfk85k^mqeztDCNCP%Ii~Mnn{2#~u$H517x!t$w zl{TBlI)sP|>+b+58De5kNqQ8N6Sw)1fgZCUwLo}rH`r?lXv)XQ9$aB|N{f>C#UbhwacnaK#Ru zosu*-VaY@;2Qp`Gyx;tgBkwM;C(ZOQxk@Tt*WM~m2JofskL=7F49F3XoFEs+{!Xz) z?!E!@8R@FJypNr8F$^vFV|P-aaCuDW!+Nrr*fDq{Z$B<=((v}x>d8&oT5n+dvZw9u zuu%$hNIs$T?PH35GvbQ1lSsIwsq<7Ve%({|_G3BLRd6j$-97pt*t|%+r?}vyCmR>J z%T*FNf=g%?gWEg%5hC^ylKl9VkdgvlChhz4ukc*7kg*M>zeapO|}pRRF9^9%yldoE9{0=p`nF9&&sS#=^uuV6i}ICest6C_h=nTuG;QLE80kT$l8#XRFJ=9 zoE)~m2bGp+h7VR8*2nEkZ@Or4^QMe&zR!z<;ck2qMpn??q9T}rcT*OPTA1* ze36L#_^GxQ6xC+dxxeSyslQJNOjafHraYcslQq#d&RJ@tUtb5UtU^@dJEBq0lhlM0 zLLb{%HmYk$i9y0XH}GPnhUq!r;j_$)-+|22bN{E0dJ{yn+dGbcVF=!Y#*Hx9mH?+Bg;J>ybxapDjx4TJIcG1>w zA!~d1Q8)`ydWoe-+DAupkEgl@y}#Fwrel-K>C`xoZ)bQh3v$K%qEsrCu^CTi)oW~? z{g8`CHv4XmdC2jD3{&{|*MQ^S)f&HDYS=lgt}9K-CSo0Q_i@&R_1mQ(h5fQsXvlCC z!Bx8D)H{*bH6Zlkxj-~6F-j?a6c*a5O<^SrDpmE&aA$bL9XWgz1BSvRESz26KxbNx zSDW~>u&aiLyUk#)1m@N6upDB`7}kh;MrVuChtB{Vsnx@i!y$lX(lg7`sGwIyQH$60 zT-y3nU4Ve1elH{nu?MElxEDd3R-CwXGV&;AOV3DD8f1Kej}yZ7V_*{ZnqdhnOc&t39H#V3NxBS z`^fA{?mar-6b3tz?o|c`qdSgGIt8ryY}o4oViPO02pT%bUwIo%qmOos(;JyZR~kI% zduNJ4FYGiJDJ9~n_&UEgEOLqLy2a9sskCM=5E_O{s?p9;`TCzz_(A>Yud8Pw>VwbV6RI6t$u+KJx2dN+nChg`&pRV=wn*7k6byc5x`0DuLS2_!os?1`G>GG-> z22hyvlKX&hOC!^h1=DZXahW!~_@#x?AhYYVVE2dJaaS>hnyWd(qx`uMO{U&~tZKav z<+L|~aUMD0*b^A5*p@gwlKs`s?pvamev^c5XlrTi4+y6z8#>l+Gw?>uVq8AM%4Fba zL(A^QyMlz#@a-CcL}TQrbcGKc&{kSzYt3$31r9^Q12G|El$tU?l58TABtm0xPY;8* z1*@m685J>DJ;&24%%XcnHifAnct>|<=Ob{$lc0m6)tpx&S=i2|N{=!hXIj(g2=`4O zW2NVT`{5M0`0pF=(rIErp+{64#PB1*!N8h2fQ!m0_@9E8!A7(13F4&QL(v8V$33=rpy9 z?ptBk3lxQRzICyk_Y*LL;8naxPL^tR`bt1T4vP21o!9j27KXG-jz4>#F7->;gR!?a z95g62?r`FD6ox_dYo2|lPH;7eowjHlJt}MSk z+t>x|RBvzOepB9jhOwmK5*i-)Pua+Zl`Eupj$z_W^Fc7wIGVoN9z7QB(UAymMV!qn zSL^ij%PffUU5N)gwtb8VQcAQm#3*L&o=P|wXlo=e;HnS{wrsb~_%7q@Ei?J>aakPX z5J}l53Vve0nGlDP!wYaIQE*y8WiXNTiDaBag6@r7UmVLP3)gbTAj@>PQ>ybg=3XX{Kr7Z&A5=w@w@a$hdD)A84!3t3&MydYy zFTkI{Fr^VMeENUU3z?P~8QX<*+uR(sLwb8z*aeb$2~!h)6RKvC7kD1iZ4ZAY^I+Gh zY{#QAmtlGDpO%{D@Fl*mguG!jD>Y3cUE7nt`P{P*Pss0phEgIZ%i7wy5~1Jtw!Xd& za_~f%d3jSo7v~cAT#`%u<-=HnQJm9Kx41ZfVsBkUZ0A$SYVKg;;#Rb^38^S67xniy zF1@2yO!@={IA2*^$G`e#oQCtic10T!ou}CF7B%OrcF8cEgzL3)$gdLyM&V3_yUO&Q8j0Ox70cytgPBC`xqAj$zx z+%P%w52pO}FQ&{uwCy-qKD)R!9&ZtRO8oX{gzZbam%~e7*S_>}vC%GG^Bfe*RgBId zJ7c3!41*m`pwlm7t7{7b>09=TbRN81e(n>0A-}d`Fy<)FvVRU!D}r%oqanD62l{$wFHSCMKpFM{*Xz!7mq(Lh=xPU%anYLX-dpomp78 zUDyAWakE+t31OD@rvtQq)(FfK57ho>(f|JBD^;z`#VS5;#*0g~(~b|>bh}(}X3!ZW z&LkoqlxJ;By%_J_mSP+dR(^z?{%{3atQ6CTWLlv+d4HI+2FcMiE?R;7-3p@7xnZC04E^(%E#Q-3)2!Xr49Cn>d>_SzOy*&z z!5=W9QwlM1142$(db&J5K7Ls(vb%+Gt1G1*z+}NyR>Hu*a4mrB{+w%$Z+!DcUThG6 z8w$V;vS^-+3|a)n6gk`^Z7M6FhRk@CuG6o%0BgOyy~%n2bMB1;uHI|&JmVG@WnlB- zb>))3xSRwpq-^WnU1)!i1^0_%T^d6Fvm}y`JD5gw_Q%&>%G3%8WYVB@mC6oK#~1?@HP_|n z@GuAx<}+pCYF{Vl0R1nDBQMtd{5E=Se}8}P&1?s4EiHW7*)UF<`yCEg34O}TPJfm( zH^dlxg~vs-htbPOQ{V`oqdS$`sE2d^S68WGM^G4cIN;|m>n*_hq zNa5fd4A~>?ppMVpU2IZVrD#zHfoNB6Fv8KXw=Y*BUH}@qYKwQ>G%_>-O8YK~mcSBJ z9pI;I#3Uq`@rWEwxzPFq_|cuzB7!Us{AXhL=u5ZH7I5>V1`D8Cm#5JS%=bT{-(Z%| z%0}T0#&%0NEl)*WX^k6rC|V}7-1YieB#Y+3{#ufWd!wk&?(dgTM=TJ<#D5k@nxdsA z=~(G??0)QdW?SHpj&8X9Mp86}TKhqSZqaKfDobq1e@0eVjMTVoPG151K1hM`87cNp z8vIt&=!~9$nLG^-7**lxzXYPuoDE*_dj3S-m_9I?Vu>NJmXf+Jm0XILsQ=eQigI>P zDvAccSj)QAy2@>^*!U4@+jGPq*B^z`hDNnMpbH2~7(%-|!Wr(n7xn#X0!243Yvzn6 zsq_V*vaG-UUh=%s|9ErbX%DpA)UPf1pG5~ph8!)yC4XN}NpUX^J*a@8=i)xVTlEV#fxA49Ie;PD5>T&2AmD>2ZpqM>iKGV@2ILZUqclnV$23>5JZ`uT*Z6hVOL;gV*XOpmy_RdB0>U$a`JK-K82zhHFLhZ_5`#x zLZF>hwcSV!9xVabt({Q7jtpvQ^V419Mgs08J?qlh@Y4-MC6$g%!fYYO$o*JQV)69m z4v(CgCTOm{1E7mEV%$tp&2j;h7Ju*FBBJnrPDV&3E`ZFXg`t-HG2w$L0aai)U3I?F zuJI<-2856dB>_+J6b&W}rUKsq-GKGDv_9&YE=^^~$6Vp!`})Zs5C=DrhZn5!f z5*+S>O+pFX4h8Il79N^g2JRSPa&F6K;Q9ju8fw5_L(_Z+<}ft10)S}WN)mVqHtVT4 zEiJ8H9Naqpd~`xG4b9cSzeh)xwA5|j2a>GDN*)+Xyz-|yaC%%$>@bT}5fHnWE6PuX z64}Ju54k%~;8UcyW(8TpSEKcK@c@c?$PNTyZ-xcH^x+|oD|!F(8x<*CI(qt1v2lQh zZ}*^46HPZnW0-zG2rpNXA`|af8PyYtLXN>a6y1Qs@ClG4@^w0eu^X8Uf1!BW09Wdb zxcm-;Df-G98WjMt)~eBeB{%iZxm~b84-%e5(boRT=uH%GpmYEB5W2oQp~`hysm#Pp z)zdG?^Uq=K2SWlE+7KM*Gte$@gMKJvWREW>GtRf96cuS-)4$fVJ$>mq^!Ewr1I#MZ0@tE*D%jOL*X(ClQ{Zgefz>x~4dA#H*=(oTisG_E(#;}0ve{(t=3BY1HYemb_ zdGe=KX!s3;p~jZ$WKv^*r)E2y=a0iuV)f`qUKdg_2!Gc0ObvF>bEI3N&(Zpg8|Hz9 zzXbog!7?H$j%SFPn(%;t62>y~HqUdAVozFrfM~G`g>msVZN35V3a#Mkp0>a07^8V?KZE8pv$rh z!k>*?NjQudYQ@p#3?`XXJtsPS-FVD*gf_gEJ6{cL-UHZSr?g%|MBg#eE#djRJ zZACE8V?I1=Wft4>%izsP;ejY(-&08H$!i$Hyqya}73V zw43NtEZJpauIy@-KQ&jJ|L!K;G>F}V>Yv>NlpTe~*ZiZ*XE+AsWe0qhTB`$>O${H> z)xZdHPHB3KKo^?)1S_ywN_p>dNpyV^{D}%C`rTjJuxChcN^EfZX81M$d4Rx!hlZuT z?OBWxO!W(J!j`MA2M)~^ZD~c4E;7O&-Dl^ToimkQV7Kz8!)b84?hgUSZ1z;l!bhfP zJ-vVsi|Naim##2)L{me$usPT2#ud%@4`_!c_k10to{6@MS71>WWjsy}>c^CJMF%RX zrcT@U1RWb0CUT@;qSdV|vU}+*W4X**LD&gJ?FhUO0hKwZM&R%M!PxEoRg7SxCZB$s z)a|lnA!o^E-lMXS9gX@$VJt$+y+>6aI8FJb>9dt@t4I4CDBcSQ0g^Uy85Ir$k3jkafnb?rLQx$P8)E5KZKUX=AfS{Q2%ZvY^HBtn+vi%}Vi z1Z2Kz3QX;Q<2m~6iRs6GHj4wUKkck1qA$hpi+unsXI?|63_MXNUI@ahF^f;73iwLH zw_-Oq2rb8EpbfQ}sx|7p2RSOl9PUBTOc2pS0kci;w2sF?a3}HFhcW)rgWRIh)b1;( z45()`lcc};0Whgc-++&ND`Ld8rtYUgCQ`#1MK94Ho6KAK_;`~$WJ z1C1rkLv7H2MC4?g3Tq_=;-iI&yXe9K7r?|g z-~S3;hN+LuFHzPd9gYB0Vui?(sWi;e@vs{0MoFwrrFoGaKnR*W))b^wET72yei}GC z+;ZqbA>cyOzs*p6!=$suv^s z`w_v90}L?Y2{;FT`7bO1La0626K?gd79SFaIB>cU2aY=iJ)Sn$Z7`~~mwWy;m)sEK zKO3g`-wq$01-xs-7w-ehe<1;|XNdX$mkY6?O?%NJh#=@;iXFDLJu=2tB>(v!=VyQL z!`8oV^!FtB`$Ll!vB~v)1Umx)GWokz{QW^3hWLa(|Id6OZM2lKG6sNiv%wK72U;Rp zK?y3nfA)rFp@_P8CTCWSabG1{CnHgDLkBPVY z<9k1(&u~{$9;r}aXOd1@_jt7e}E)Tgy*w7!xbARMv2P%c5BnA%g8~)1NK?r z6#Gy`K5ID(Kc)npS^M0`NGpZ6LLwQIjB~F{Su*M9<6eD;Uf%+=u8EbtXci`>DB!ki zDLR;&dmrrj(L5C?U)nru<^!+&Jtj((5zGor(1L6O)zzuPWF+VOuGSRKyhPvp)5887Do(v$UrV2+6;PZ1czH?7TAg)I zP)yED?29J4e;B~hhSdi@udiF%HQo|%m#ggSCtiN+jtp|?-a zSbrr`pL}o0d-+i9L9=8Nzx|AHZ=3F{FAdE8dP>(c^@hX5=*3j6Z{pDg2KMkd61V3z(&mLRbML{1@x469l_0JUgq8nv zJ=|%2-F+En?!Q6&W1*ezQ5JWP+Y?#GC6L+$$bUMjQ`b}3eNiAk6*mBYjRQivFNJ`P zd>hcMn%Ith%mH>&gf%MU4NytG{!uLm+^u&{z;UJxP>%0_!)p+){^Qv4L!UB^HWC_F zsF%0dvwjN@mGRJJhWi_bxfvSl01t|98JPPsngQSRO&sJh*s{i)#3 z)15}NH!D56wok|Ukex}7RYxu}pXkZ8g>@}Dsq3SX;wL%GU7mU>WG0trW{ljL*Ywys zvQ}0RhoOEf#ai_I@s|Y+@`et&GAkUg?01z^yOMs^D0?#vk0&n)oej+_Z(t1Mw#C6a zZ_|u9I*DM?MppuXRk9R)9i@P`@SZECQ2AX`u~;7_w94d)`Bc=VMrf#jJ}Po^Yn$W4 z?bXSG%;}D8)&_75`QMQu`t@>qL<>D@mr1^FoKItT2Nk<;@ogZXe#!J}3k^p{N8Psp zJ{>Dj6hTy-@6fRaufg<38_e3O0I^WwIUCVE^i8pd-s7lMGF=GZlTpVdCYAvd3d8vj zK{slLw@F*qz5QkUPO=vm5-I@)AA87}uWftJi$8R)SsO&%z|3gmCayfdWlie3u0^6bv$M2w~xi^rp$&9i^h z$N;sdj6*q<|2qDP$Q1CS2>=Z!v&h_={el+{4oG1h6TX$x7~mUX4$R(#FF}AQhO3=BEW#vPG7=*}^7DGjEeB$&A7?-u7t$>6{gzpI!-SbV&xMIX zry{A&s_3~JVf;Hala1-k1B!-9gGr`3D^S#M$Jw7qKD$jOcVBozQRRLPZF4Xm`z<_5 z9}#{Sw2V5}{2X(?3w_dVfgSgK<-&&3r$M%NJ=_>*hQ2ZF!25Wsc_-JhyOC63=q8#;Zt-TJ5Iv@A`UmlOD8M6UDM zGG3$)iOyDV*~M$7E3~6hY>_6~R;>COn`Cnf)IxI!vcL#BtU!oYqpGIBec$kZfMqLE zqCj0y3?{QGDk{ZbeI`m=AIP@ya3k2afW}O5XmF91o6CMX6vs|LFmt*Sk3|mYFsL=8 z4g0Y&__fhawOaoJ@!9$>WbrO(){lTDSqkWF3nj+tThfY_U`wDj20;^9?*J16W17;3 zW4?f>|_H(}VIYOf6j+lBW6(XxbyB|EJR_6E4ia||~ z^z6plDP83py(6qX8~vgLTvve=%nq+Db=K!_zvG}ELcyRY4#`}m!}JyUmRq^@DcJ2x z;CU`SI?11r4j-cZOiQ&PTq-Ya=fnA3jUE?z!XH<=iD~XT-7X68I#;^?DEsq*3wR_F zo4gD>Bk{@lw}-Px()|Di#eMGhCT9W`&KW5t(lMiEibt*`Qxf%x&}e!rT1;6zmw?Rn zeOL`nV`?zCNHViB?iUD1@Imzd1_^G54Htc)Ynx*Ie#dB}aAEd62y^+4pylhVr@?82 zC~xd+b7P)_9U-&52c4N4Yp$Kh$x$yj0@W>o4kI;JQ-+b=qb|fw`qvYXF%JL+Av3L? z8Rjr_6W2pXJ2~+#X1Cq~Bk4h@WWR9XJA}KJi@7zV?6!H@yoA%NBg;+*`Qj}g%%Y?W z1i=F~YKA2auk$~K&sDVUs{+i=QCdn2fA|cL|E0k0Lkg8^;dqDJCIPe>(qBA6{TVg^ zfs#~ z+JB33YO;-FJLNTfHF$5ff2vIHH8&*O7IO8gGZo2F%mGJ*a6980e%77nRmZtnd%J`0 zmJHCxZp!GIo8@?KmvJF?$_V4=^{J#EJAJ8?2Gm>P4E$2@8*t+H$8}>OL(0I3=+wu- zrBkZ#1SC-?5hef<2SurG24;@28{ngQ1Bv223_8rn)v5AF6rZUlaQgli#8bfgKZxgH z0y$qqBYH2d?J!=i&}Y&#`r6C2kT1v4@FQ4)q9K2@_9b9#XKHWmUTR__2p$&_U>bHM zKf<1o!H;N!Iuq7f1JDXEpQ*I~{vmgUcK3c^MSj4@eN1$mTFXVetfR~L=g&!RXzd@lX_SPa}RYxmlUOPic~UV|^JcE$}97s*Cf%Ljc#hf*SXhv7e4pt17e z#6{X!=<9ag6!N!GzG8{1oNY;T+Ujk=hG;reFlna7Z3U;*zHN_U<8LAgB(L*LR0rVj zm!Iozt(@NsO7M6zEh#<0PH{{eU9dGh0IoAuH}uxyB#w_#Y&;b$Kb2I>(D=8Nw(0RFcwz-Kn0!3PSb)>(f253f6Z zuof9w$y3I){#YzlEy0$*>-b1IZTa}_DpD8&O3jp^2Ng)FAj7JopC=o}gRY}P(OgBU z3D_|cC5In>d2Jzip~d`xMpd&IEJ^u>=~(tOOcEmdgjRJ*Qt8YM_2&R_BE)3Z&!W{d zE`%FYX%Dn0D_eHup($H_V%C2~3X)u6Xcs&!caelU0e&2LgpGy9{^;ouP*z~}uCTxk zOC@d7drg&kuC1`q7hOSXT0hbgjLEh?6ODR|5vh-JlHrp_^)?Ufe4> zrg;{coYI3uVPO0wtZH{Q?c>Pn^&?4>&reDAYr`UOx}` z5!uzJj=XC7e7?3VRtZJ*c~y!$z1$e--#7Bs$wxYy2*AHSqdT~zIBXxQrHbAHASc2H zlK~4#vRx|8350cJ+Uwe{wnp0pkDrAA`Xwt&T9l@i=DGIz{Te7L1C<>_cZ>C+OMnf zo(B>dpFlII)F;lYug?z&I(D=ycw`R;wx`7j!6w=|e5%c{xHC&A`eZRlnuTMrDCN_k zEuU-K6CaeVO(F8`jDIgA+;1LVc1o-9Fz7+ac{n^5c%oUCO8x$y#XzM7oTyq^I3>J^NU{@c9El43+;2TOnW++vUi>2?s6#6?j ztmdU&@(8iSk3U5IMdP274u)0r9oOLSi{~lifu6}WM4w8>>AD`y=J;!3U|X9??JYA^ z#CcC{BOpGhD!Zcv44B6>^{*SaU+vL$MZrrREgB!q>(MuNjdnyYer}7MA9Ytk2k$!L zv9z&U(;|)365)}$bU)sTim<)cMoOa6|9%*XMa-ivZ0?rC3Tv1OH=$q9whC^H;~KAM z*#PTt!xw||bv?5z!k%BdAuP2ptZ>cu%L_jtpKHXv2SL8r=NI6*8-*C+c)xL9>E-?Q zzL6INxg&Yzq}9{J9*Atjh;?E+6225rsp@@FFt_vsI+qHggP zqi7%PpkER2VLek@ioQ4+Io6Nv^F5OF)!H1?_bGa$@t;|aqqa!}0aq~@as{}6zV>c^ z5}am+c-pG@0wgZ|td6y`OOW@W)p0u+gwPWceo-vY-=LaK5&rS1NcKy$9$N}O&h#}$ zjD?gZwC#n|0WNy}ol?A2Zz^2~AIORHiZpo`aE+VF*9Fk~-U00M`B*~8TAidA{qQS2 zselG2oHI`JRaqvrEX_eyyH{J!$M-gSGSB20x$FI4m40+F#CKrf&wkSJ6ELn z$U3oE=X$Cw-UoA#2o(1c<2Uw+)NyeDFU_e3NMv zdERp42ura+;&J{`iT`pMQ(Ix4Wnm7}oCN*|#Z{Ze0k3V7wg{)>n!y5S*X1LM^_+q(1CQe?l>e1>6*ojD(KH??;L9ul(FYgI4tXE@NG}3 z+G-=>6wgD3mliTtS?Td(@O5V$0U1B4f&>?d)IrD;koV~l0x82>as_m7dWo@rN9l~a z{~;|5HAZBCAw}-aQs+@)T9wVFmjcZv#3iL4LyYtXGRY*X$+^qQ7f=$)RWz3FY-dQw?LV2~k`^i`~UwApgyhN4-Ts@CztF7^!4*!FV;KN8byfN06#J#5XjI@DPGXj6z zZ7WG%YwhIeU2mv8aJHdqN8apq7|*xAN5Nck!%cXD(jxrfF^&{ZFUV-7z-Yf|4T|a-O+}JNm(6F5_V`TFM(E9pfQvQ(C4q;W+Or_sdQ6FclkbI( zo_|B^qUSP}2jbG6XtupF#b~A92Ci_r4$S&wV64Ra>OR={xjX3CKUBh^jzPKq^77Yi zybdjRuw3paYJgroB$L5P`kmqTp5ID1x4=zVqqJwxheUyf2mxvqpdf0Ae>35;@zEx8 zQ}@L1n}Qk%vuvV>?T)x!eTcY&WWop}_hl1DdYlH4-@nt{vvDzwEooo|WS18##VM7R z>&XvIGTW20q;jMyfBS`1&Y;ArgkFMfMzb_lo^OxHq3svVIi;%udUrHQZ6Q6k zkxwR!AnK%jrhyU!h;KV5A*k?9Dq4p2%f?}PMlr5>=KrF>i<5y!7qvBP$?G_h1Z1`` zbaNg6A195+nh8he@r$8IH5&QUJ?XDGvEkDuacI%DzO@W(J*qPLE5-!-eh!CK>v=_hNZ0XRugK4hb!-> zA}e9)!=&X(;V20A7=mqgkf))-d?~9y#T<2TrSQ_W?Nt>Nb)@D#n)VnSKRa|2&aRESU!?*(yw)|33HIAgNPB11ml;gp-ve- z(m!iSd2$QjqScExZ{9@mKG*Y&ne-RRMo$=%h+-g6>f|^JOgRn{=eJCk2}%G_Wgf@B zzI#)BdJf2<29R(yNB5lmMRCobL$hb259(%>ey1N{eAs53zw05mPH0ocb z{1K5_MkP>#D){-9B?PtR)Qlna6^k=)+dr}T?*<+PMd-;gg_lB}1-$RPHYPye4MZ@S zkd8sXrbBo}TaGXT@qVGfrw%P3pFHkF8beKb9O1e@UG^rL*t(k0duGaGITKtlyIZY_7FG=#ze-SQ(TdefJ z+|*CX)NWf@YMOA5@fDI${g)TOp@6%g7ahlrE`4QZ69XBg#^f_j5#=xB{^DfsvhZ(_ zx(?-+zI`7&E!v1fKq55Ms?Vb`ZC3PtT5)yV^4sShUqvNr;55TXgtmf8dZ~2+`Qft%`b=i1o?zq3P^6CecM8sdo8jYeJjGl^c|TBGxycb&S3_ zCToLkg)$JxOoe=jth?k3xB1FJ12EWS5dnm$DfZtGW`Y4WLWG0Ftt`CFMj{7}*&b;E#xRt^eoG6`_;!+} zVodz~Dt*wMVD_*U;#fd3O(RN?22#Q4YJ!SZKV8kNc12GdasXqmoUi2~da291Uj2He zXl5i8`Y9!+!{r+EJbzPG$&nidmWFQ>rQwwZ#*QzwLbZwgRV1LbROvsX zuY($@*wt*R=5gk+hpg#y9f?OX? z(czUb#pLo~m5&`vb#>BjH#rXP1*ULuA*NszT(I5eLbF$1wTTL1N8 ze=)UV!W`YZx~X|reRm;l6!)L;hN7M2seb})$2g!F1fd@b9=AHm3k!-K378MYZxxZpB;F3gM+e~8hjl_(=HC&ujIaYkMxH`PQ4%_e8vlTDd!O^<2X0gIZ28M{ zp}2*?#N|^hkgq$hmWN}Qg!W6&^M3gaT~(k6@7*wTRr!kn|KGp#6Cbvz;$thNHf9B2 z+Eh^&wf4z?Rs4^hjR3le141}JeX$Xu@jJAnzKC`{B?yEWljvO?ZR3J_i6gd-3)bui z2U+B31R7b4Zh!y_K+Ch-fL{848kqYZT>AejV2x0lcd124K)y(O9a=o|KH_ky?v8*Q zF#fb<0JGem#%hxAf_x|{2hhh846`dj$l~LF70Q3s+h|7-c*hf5?U=*J#A&F9j?Pkb z__|(S4_BH=u4(=LcWzZeEQ#@f$w4t_2#HUkt$5;qn1F34Hm)jFZ!;L~?v7LIsLW*p z(1#RlPJGkJGJWoN(n-M=iLc*n+L%TyPY>~4!?Hcgf3o@d^SgPr3GEoR$3ku~k0?bH zftY_XTO5AD!13L?x4_8)sqcS<=u*#VXlM`~F1P7MlmVi6-;DBuFd)!Sk^?2;!J>Y_ z%ZwPWOcmlupz@Rxz5D$-<&&P%xRetx#{bxK6pjAQcCl^>z)G$S2&Jtw_NcQx_B~*f zvDKj1;hGr~{K}?lLN|YX&tMlO^2V+;DQCfX>O2V$pwy}#V1jt9CFL$e*pGB88!2p- zUrFi8ur`_;tOPt8)}8&qo`rU z4=E{v*Bikhg$f~U_&5fod@>>5H{Ncg=j&8Ym7j_1&AQkX30$t`E&oAze>LZnfo-aQ z@9#aXLyg}-|AA)PZ+|H)tO3in2;1gedMI)Ke@UB1KV0d^viuiuK0Fw>p~?ZiV`ZWL zwg~VNtE+=Hx|?rwpmpB;9t1i{V;*`Jc);SH0Rx-4_pnc@va|ilTYt$nZ>3rd@81i# zgHEFIXGK<=+DEwEbit)iAMKTTKrp1p3LqBEZ*YQ*= z;3Ov}(}aaG=7U(@c(7;IxI{ZT_U$7y$`GfeqV6F5@p-lJb78d+rsa1affx+sM$uBA z$eGCB6xmz6NBH2N6O9`2+}R)lA*@pfV9`A8zf4F4U7jvE^phJzGR5$hAehZo8qudz zouk4bp~JmLjUdSQB`OL`S$I6p53;e7nbnI`8f=$p;XQuD$}nP>ZD7YhR&n8?2PL4w z6;UX`42uQ|Lcp>D7TcPylpMR4qLJ#j>9x@L2(lWFXK`aWEk~S5LQ$z+C2sQDo;UA~ z26zKP85_pKrg$x;=1I5c=ISl~jjk@f)_W|S)}WCuHMEx^neWi!v^Qtd!k8scLP9Qt z&pukBK0-MCIEGSoKEGI6IH?XHYm7AAtU3O9Sw8}jtOt7mm%p5>Y&Pg}9h8$h6VVQjEXefk_Gyk(pD`81$y)jA_EW z&s#GNXOg=7CcZPfYgxEnC9t`?-n3uz_Ip@$^-IQgM<@}c4QAfXI`!WPvhc`sWsNc4 zy>Cp(DrkslNT6Z-l_RgF!y_oRByi}Whh@X%A3NaTDwK$d5ko5KBLs*T6&P=UH8|Vh ze4T=xXiCBlF05CuL;;@)x&4d$K5Vi98YR_R=;KL@K+6VV3P2^^fJDnB(yFd2-|DPa zBy!4M_IZ(rk`wMW(lbn9UDxRz|mcg-R8*-AVh3^#-6ifr`t{o7Yxgeyz*sQs& zOK&`?aFQSPAweN@8)ul?!D>HaT$V<2?jU`my03z6s|8&hp&HQG8=G&i0R4K z+v3QyQ2EGleI;w23c|RMCa&T(mMP~;U`|q)S>LR~gj=O~T+KRHKN_UC?D`j)s^^pU z37+qJmcm}jAk2KjvI6=15%M+!T>gT46Ml~QJre{Y8 z0j_#2U`(PGsQk=wTSpZ)84mx7im%lu^$$tK`)uQqY^=$^U&aiy(h=Fn6mHpyu|S~# z&V}LkTwE`;P;h$e0g(Ug50GjCfYhG>PdLC#%~dbaK)v8>j4gU{07NqR;Ky~alRhgX z&Epa)_cIw=KziK)t#}8xn-oAHwQ&PLVsQe033J1FLI^YG|NROuLRB`uCJxTHuUOo+ z3;q5kk?`@O23iJ?2jL{WZ>qs7I5W|GN#Lx#5}ylN?*jamtup9UbW>+~A>2D(V8@1@ z6Lo<($V1gW8hFs7tCv13VP-}TJi26^pn~AAi|ZgFgY4ajg76E4D5(qYi{EV@4=?Al ztV5zf#H)~k6#e-`MU>NDbsS~A3GfXbcBOh*2xDU}l5*HuQ`bGP93s0_-f$hYr$)=km zJh7_oVi6Q2p#DIS=hOI5_3i9XV9rCM^sB1as@l6f;tRnV63I|mMhJtprLy-Fx65ob^|&v9)L%02xCA+ zC7}*E?2PJK1pRk~+u^cs0E*bg9<8Fmr1J$0!E>}@LP0R2h0g$+dqeU3QZ|$22+%s^ zE%G#*iCN&gu*qS7{W9y@cOk;f0RBD6N{?PMXys!8j152Io7-)ZJGz1c4XT1JKx5yV zBL6^mu5;kbd8XoF6FUrF8J)FhZSYLLv{0 zumN$ED^}^DtVp}SHY0bk;D%3JQIfVVOGLOqV`9_!F=%`~{p9JAz%duxjq*X= znnfD`D)P3J9%bMnAce8(`L4bSNc3X7!q&pIZ9S0|=MkehYQM2{Aor~-_L@@H#F53o zf6E9_SoaG`m^zc}B=9axzMx-rghtVFlH48MrPv zzY(SI^8HbxHIeUmV=!dyIGHQxpYOXh5|~gL;p`e$)5$R z2emk@SvS9)1?^POQ6LVm02Isbqhd0<{4LOzhw z&)4^SZtd227lq?m4d{vUCcxW($I2^|?|wtT^*>f`&3Y@?ouY-u^s&;~&X{D2zO|P{)WWIT)YTW-cmhtvrUOO?-r!W62paL*e~fwHwW{Cm7RW{mX}6 z)mldV#atR|qW=~jg|Q~If++uxcmwtgqt?oqvpB@s!MP1=CREy>zE8&jE1~M+#pSg&#Q)%!@|*f>q*zS&7U$??CxFEPVF*y2M0lKZtdleZ+4AqNaC4Lte4B#>*~Jf&Lb?G9m?SN zjTw$NP>O%`R0D3~(35rHzdof4RAht&jb(&Q0PEqhH+|qbYUv)}`zWVs%$76jW3IZT zAAFMxKIHG){siv*{&%PmR+P!NTpPh>h-8v)3Oo}#Yb|~JTn=7x)ag|P119Z(ib1B5T*&-T@gax;4^hN_zO-g3@Whk5?rIC9|pcii?rqbegUEL zIK*~acvl9v7TFRr0j9sGL6CssXW`(L5qs6^(_G zn&DSFn9Tk}(~suS_o!zqC9XWCMbtpqc1i4C{J>F|M(F!r>f^J9DJ_ft6Np$8)+6e3_PXl+vPLv&J5u-mC%0Tt|sD(OQWha`KqursBymo{we5v>K=BGN^@q7ku zMQeO@fv+Z;f9#XoR#;tB#k@5Q`U_9FmtQ|)1cr)1ykW&-Tjqx9r>K0aM1y@4{>F84 zW|Lp2T1VRKE*Y1^R$mp?6<^*?VI49)TuLVuxXw|ZCvXxj1i9%b_s!nwqF~%kR9S{u z8-w;6cv`ZEXtu0W%=Ye8Xnc>}2OwO5El$wTH!yT8_{61OXcv+*KolLQMDJJ5dx6G{ zE>qV3l$cG}Zit&`yof+SfeH0{U4={BXbpUXWhQ}{w$V~-)$?cFTmbrD*hoO=6R?$o zsCDPla)5-0@A^Aj-Pz=I4PN7`L8^Q3Yr2g?&&$khR$faj>5Qd~#dQ`Qc`r|fsAF-m zLpd)~*p$F1|2-F>Jifr)y>|Zw6I=Umpgbew1EQ(}!^>r>x%~Kh6Md*C!4G=K^sxR@ z<9qudu@nDb`Q>xvMe1t|?(e!EiA%bw8bl<=%LI_#ck*zrOZo6TrPT26g+Jlk#7S1` ziHp-={R7&baD^6qKoPYKRwcbXFW{5@R;Ms{H0{n%_jYgo_El4_{fa%}$&l5Z=bZ$4 z(j?fZyeu1zr$Lft9zw}R7O%uB{VLHE#4e)INBzn_PJ7^BPtH`3lT&pu+S6qE^RH0A z2afF;2C{FQa)`^_)dU=EKg^ryLRH$9qhTvq63ka?YNZHB4m6c+Vvs9wG*iZE`>NPv zdAhm5XLSCtHUka{0Blg@l9rVLJAey+c;v8I2CY2^XC>Yj?Q~#hmxJPV~w!jBET6Ie$9n}jnOyV=OKaqOHo1NB^MU+CzTb}eXYqcFrL~ga=z7U!0J(2 zEE)FRc|zbQ-_VQ?s15bIu6KBr zsh*f)8Co55y{gmu1L0cEl|ChLz`XrpSa+u}axq~+ev!^7Qz#cCJy3cPFQ@29Lx4!YgS)*}&-s)#rG zBJs4d#5f?FXbHfqkcR*2~HHalxoO7%2H9) zbOO(O&u+NQ+RQp{Wddg_VLOogWm?$z&sDKP}ChoXyRZaHLg;Aw+QK*`_Etbb;F>Iiaw(2zZ0)P#{Kqb_As*2Q04jU>W*^ zK4EAkxRnYgM76?7c*a}C{Dw>HF$mK9$0+AA#U>`N0(0ybxE4si{$yLvaMBr@Z!ZXI zuFK@l0*u;$(vV{m*~d`>zv$yxImQ0(jn?4~i&au#E3FF0{=~UPnx_=jaqNt*U z4MKEF_T#rE3?(TZG%=Jj3}n+pB%LeEC|`~td4VoESZ#&ISn6=6Glsr6aQ)O&%qr=n z0hr7{3jS`o}P8Aj!(8>ZK z5}gMgag-jzqMx%X1SFrz^Bfw{wW8Wt z(1?aWlccAfed1qB{AGM+BiT-+KN%x8OX?P@HKVN*scB=(t|T2SNW*!r`{3p5#qMN-?WwF$KR1x+IQ4iSawIo}mz&7Wl=qN(vuD0Ee#l?j4u7T;Q7! zD!W?v@NiQ2Ku>Xc&`;}Cg@LexC|{3csu^SS09r7uEJ_08FZm^cCf$KEv!{GZA%xyq^^m$V(kMT=9#~OJ8%RI=@xD6R^v9Dy?)6tAcL2VQa3hWb9U<@DxY9=s<%12{V zLwRs?qC>O^ELs+;{m~IdE&(E|-E?voN8%p zST6+F8&Tr??d@f22KDw*ff0Y3N3{&c$v(X;`8<>0Z*X*FVDx=*n%PKdk(5Ek4RHRK zQ10Kwf;09OQ{EzXu3Qir;Ckw*GXJ@=7uzDI46XI4tB&$?Qdslt)96rE*zxlaHwDOK zBas$eRqW@C!WG^aH!Z3uD@$_aZSm<7LL!FKRhCabK`CeKhm~(NIdmf=W&yB^gg%Ko z0Du8MDflq4V56Y9cJ3hH8UI?*iJG_2^?kACP?b_w=_3#eb&)EvRAAMp4kgauc|=}p?vE9VTT5~fzd5xknfsqOmNij2AUPH^3wk%)rL1b9%v{Hgf= zNvZ!3pyo|T=@@-{4G)`n@eTO@gnUazra%PxKWYFEh%Wqn+yCQbsOi;oSFu+KWQj_u zL8|zgF{{KOIX_t+_l++QMG&w{aM<;3{*j%?Tl`c8%nD1Xs9TIk=ICS;hz&~PMg z;3iT^C^fj|F>6n4()~wV9pQ(C;wSs`u7$8{r3=uih?q2j>{n z(1+}Z>bs=c{QTevML0R%fb;2=p&^`RRbu4!YlB_X4@7v?& zq%7q!(xgxFT`h3ofBh;EH+Vu)q(c`%%KuD~B!#oq$kCbk`KZi%?V=3eA=532I-5C; z8|dl5($Q^=x8HqOcibnuDN+a#UKe5)4e&{yjspgrOnmiz(vP&2iHX9up)qgV3+Bp5 zM|0k{P-X3LYl_X@rU3;vhi7$j-{RvOU&Ea*_8RrpHm?~bq`Z^;4ck3wJ!GLKoNLy3 z{Ui8qM-F0tUqLvq=@~z8kL)!L$iq15hy}eaaI(S`y5IKMDPbgWX)0RDzbhA~|E?(e z$B-Dafm;?zHEmp>p9rhwD@!$+Dl%U7oL=S8spCtmKP-G&j>&aYrg}&0ec@>Jb?`$D zO3(GXqr$1~JL|3-K+?1#a4=lqu2&K635x6$gno*XKc6CxnThjpr+ie4MG%?z>5+-? z;Z&`tbBViduFYYQi--5AWA;llnqL;~;m_5u539dO5=y>KI=j2GJwctkY|;k_?vHmK z)g*Q@UrUjkia_0hgpKYYJMR|&ePNc!ai7k|aPz-%4lKzmGuf`X|zIbm-nznyK;W5wK^R6!l=zP_QU;P8)?P5&Wd zhccXc9lk4@=)L~IxCXCiqR#-|0C$Z5F3qy+Q%~Z#ij&Xdx@8wqDWYZ#V<8(8&$^M? z+#>-8K@6FKG7^(ooI?xe_UM1T3!w0)oBaW-f+8$?OJk1m-meO2Y32#xknx57?toPE(V|2-L0+Hq%q8eH+= zu`Bt$kqNog_iuHL%xG89n$S?_`4b9q>g!DYOc9KEy*6gVMREE=9540zHTZNOU#cGy z5<6>q)Athgxd#!g8xfLhForpOb}H@2C72TY!Nu=6g}pNTmuW^PN_sa6Ro`X_<$MZZ z@_5fQiT@cJzYVHFe(aIk_XNBr$RvYoLgsYd!cAp3CdWFR2ew)!siYrCP^u$F^uMX3 zGmvp|laR2*1)@W{)MQBOm<#~kv9z2d8iwZj*Yh#0W|MO786fYr9VzgLn z$kwrvQov->ovlv1hQybq_hjWeIDI~xS66KOHEzbyL^#8C*m*dCGbElJKQr0sJ0Af% zpB-_iEP5-C8PK(@3){jT<=Ntm5xPE25wJTr+<6Wx(d1)`)=~D_-xcOo+0*?iDp%E{ zA%ANRb+r;=iyM6_Mz(y|ttN_r+PIt*-9+95!V4%P+}|j&Od${5bj}tNqUsJGQu&2t z3tX3_L`nSbxd^z=-&@S@#DqG|`BHs=z{)EE>cE5J$bpHz;9*{Vq<*<^Y$_(36!L9> z9yG74JugCyII5DLv@1NykH5SI3=VCx-X?KiX&TMd@p+GnUfMKd8sxJovjO$Z zWBEnp{WLbNmi>CmZx0Qw43JleuI>E~O7Lyp#A@uS2iZ^x#b(v?IKx;3Uh2_{Y|*E9 znrAkhE`FG!AAAz;FoAItmw4f9$r|;h&xAwICr7sLfY)_>9hTlP+dx0 z)w#KuaL+Tdzr47necSP1>vm5+Dnn2}FFWkuJwFPS9}FByLbBfxdXC`t{jNAPuD#Zk zZ`cvDxzuq>_Jiw9>)(|R=_;@y((oaVDA`W4P;=eY)iIathZJt_dB$3Wo^kz}4gHj6 zefce$vTVU+`v}eR>a5EknNxIt=dmr&)Fa;M47JTCcfr@s@^?)4lV#4?bXn2EeK@+| zngcC%`XkAYJ-3Vxv1d4}@rlq|1!3z~y!1=W2URo6 zXu+@8E}GlCHk+@`TM9yCDAe57nph5uD+v3Yzlqx2%I|yY{5&8$t9q_RnHOD^J3a3= z5!lW(-_g$PW8>k={KOG4k&3wFw{ zkX@mPAEGSPYvj9}dS-KwadC5fyu@gt+`%!qU-PbX!h1%z-r@Dn-VKW-*EvKy&8vNi z^YgPWzLXCadg28#4Z`xd>}7f zG%q`^t@&gnt(!6N-TnpOQ0Nolm3V4`i$ghT|3o8#qte9V! zOs1^+I&)pc-uH5vlj@#prX3IMy{fG=U3)O?+uD!SwMaixkYf2Mlzt1df<}Z(@Lbk~5 zc1-!vQc?>oQd=rZShXHoSLmb|2nU#1+`sU_Pk@2V&t~f{(oH@?qZMxBSf5Yt%di}3 zW+rR*3YdAie|dR$wi#l5UdewjP$epIr|}E z(Ju!UCezo(K2LeXz5@Os)R_EIv$VYKLUivi$#|fXmCy2rw5RF3-+&nGkvor_JGJ>; zAJq@V6HB{!@{+c}9R#iC4B(rjb2wt77LrUC8=M}3E_W#MoA;!Gj=h)fl^ddukS8qd z$|5hlUMS*K4!nHTYGLj7!B!;ysq<(~xN(3+m_!ZA-=VXPKuQ|$@_eLiyINA2Wd=dK zCn#YDS;Mkz$8S8}IfFm_*SnIpBs@4-XL7C;bJ`5Pu9k0H4hh2V@=cwWdziB>G6`~h z_@)eG?n>y{>$XOs`y$@wkKPwt%vmUl`UX$UBG7jR+Q@&u2QEsXXt*?XNvVKIM(gNr%ZyKt&RSe3?SeSp>_`iq zMzC_~9*chKrj)WiUWUBqz|2}~+Muv&DNeTOk2Em8yG9suNjWjHt1wh3>!1`?&eu(9 zyT5^VHmE!iIGmwGe@#Gusj)pWflrx!n{vy@2n(kut{?TCarh%2nT>vu>2&L-AWVJX z`TZH(+b&s`a|MslDsuAaoA4<(o6a!RX$x0t!C8|9OP^VoT%(ljM_&BjWeQq9HD$E@ zhO5Xgq?uaN3I+=mbhTnaFz_(WKD?yaiJ|OBwUp_L);`1xe=JB9t*hL%an^7%cT`xp z@zLTphfRqHcj~nJNLRk+NH@>feoIeZ^rP$QYwlLcmW$fjlp4>g9_Es18D1Xqj3&4Q6p7EJ~b1JbT`7O?L5&VXt>bG7=u^mB!nTsgf9`Axn{mPGH zwXUMEy|w8jvZ@Hwzel+^+h!p!)`ztys&b(u zNV}%Itiii(CZe><<6_YwLxAFEh_TDUt~R$7|D=vh8a&^d*)3T|?uPW4bpr5A$8{`4 zag=YXRtPaJJJC72>_bPQcxr6PkhLmo?pn9|5o|1K5UWc(LRj~ovva*ly>9!hBRKqW zVVprX1S0x(0s*5(jflcQy*B&w0uH%tyY=ZV_rm!Uf_e|Lf49_U{!)jrkw7j>4MM|f zi4m;1Uq`1lt_wCUm$MT5by1d{*KTW{_eWQ|G*1>zNdA6XY%!_^5N(SdjsR zGkbk=v2bh`jDYQ-Y2Y*#R@;TQf%#pN#PUglrX%N>>u&4k3eBDg(a9R~7ewzdasI5u z(0^W`VMAX1s;rDbjPjUbN29pWJ*p{|n3`@bx7k_ebE{($EC~!TnmRg;aZ;=Oh76JT zJHLaZQi_5NsqP+l`Pah!*Bz;dz=P>AI%53$zkz2S2!ny8XNfpK`1kXJAAUzI<~JC` z)&K7&f##|Id&_?e$N%rKOtAJF45JVf|7#KWGx+|c=)gWY!zqi~d{oGYoXGY+yT5HN zyP#aAnP>GsBl}t6%lTXmX7h%$pj*{H`&H;aS432ulKSvO5a5&3Q`poh_0K!M!M3k^ zN~Z}g;l~vGAk0MjkL#+yq|m|=q5j9s#9+~}A!wKDDm?$3DWM?jzIXs%y?^`>4Lrl^ zPNI;U|GK;sOsVNW<^Mbz3YAJH_!+qNXZV=^y!;IazA6f@7yo=zI6@HJKYKsD{paP_ zEMk5i&Q|gM@!Tl*m0)G|V}B$i@z2Y(K&CB4&id!P&-Md9gXrbJNczvqzkuL+BYgS( zpJRylRLqZQHC$r+rINpbZQ0Q7hqe1s$TAPmAW0gjM&x-#MOpwZQO81)P8RJ+j;Ekqd7T7e?Y>W1NtVsx$`&$wkp8QlM#{Wa0h%oC0@Ez zKoqb9{lcRR9$()9F^B~qnqM?j6ctq!y)Fn|CL*H&ffqytX43l-F%o(CY|bt!jD(ih zveMF8;4>(b8eKRoWn>B*;(@@OWg;@t(%cCi7+cRvBPL(IyFb4dU2sl1JTWJ-^mAV= za6CLGbGbIXoqDjcTe(VFJ1J0A%UW_~FMg2~5EO~UaSdk#xNHpRMV2DKr>tq<)*2}p zm}xC^2caK=j+}gMKOr4ReDA21p)*&C5j<6QxO8l|E|no{zVE~RG~k<4DvxM8N#y1; z59V8cjE9L=Y}(zzgQSk~#S8Z%Cj%sS7H}xuZfIM~!5OigK~1!O~a1{&UlU zP#D-P{HB<6=@S$aZsI)0=_6^E9|N)ZI>btVXWJ0-DL@ zc3^637Wj1Az1+W!;3d`+S9j4X&05Fz*<7@X^WC`F>U!P;vVmO*c0}AEhqWK7r%+<9 z(!R&d_qm0r#Iw+mOhc>Vu{{$qeoeZk^hyJ`)f_dka3A0zy2D>Yq}AIlSpsLq>YJSo zdUOs_YhZ0h?lYl0wO)8tfV82~!RIahi4;`Y^3NVo2ocvPmsL3H)?1TsuXw9Omex;n z!p|q&bW4mZ0GF`CvE%8owB3$N(kBhkPKNp<`}_NM8-|GOc`` zfaDp~b?YMv<{Htq`T6#f!7rtL2`P zPnWk;AiLi`-(xxh<3MA9lMk(P?gn z0vZI3+4hyMFk%YuPMX0oNv&A52i@l-0}{8qfg3cR=ef10-j3sMsKKKk=tx5Ai`<== z)xEG_*Kv5<3|O8nfHW^n+2{KJdNN;|j)#EOCMo4Nz@Xj)wDoZB{^s2MDA^wdjsz7O z!nOX!6oHf-n-U}LP_=6_^Z26SL+-*=iO}UN>CJKmOI%r|Q+rFSI>Q|>oRYrhoM{Lv z4syt)=sl)tPJdlcS|#Iq?{1Q)ead2U+-~M_v;#lQ)redplUZE%aMu$X>zuPJghAbx$BwXcjJG?qBEO%##-js??EQ88sj?gw%*zlos8QwfHj$~=lVCw zbR?Ty^@ZzRe-wy(=hKbWCaJ zKIyP!(oj0Xx|pppzGFSJLB)f+!VZ0e^dX9pQm=M2jQ8fSqT{A$n&{}7o>jh#zVtqb0liMMA_@Du?*6P8J~@n*|wqRS3c|FsDxbi zD^;@R)*-Hrug$WazO_?+F#8xOc;n}5i^ew+eO5Bv^teSi+`7fxv&s9x-1{(SMmcsVL;OGLNB3aG8%_m&*am1U;9~^-4#}p6RdQH?-4pY zufzA4uf^I>YkY4JVOr^t9v+Ye$Zm)Xy*OX#7Q^KH%q4SHy8dX`Km7wP;(>Zk<~Iy% z3Ig%r3ttwXUNDsi#yF9Pv3#pWuVkL#{86;}(*t!6r>Do#K`hdNem4?kv&`U4$TC&E$G-@JBa1wQQ=+ECrQmD(%HDlAlShHE6pnl zdWdwa@TkDXQPJAaBUCf20+VNY&wP-^65!Z~zf>eJHkKOrcDB1-yz@LcJ2Y?$U7=|k zJK?XsHhV2m)J#ToD8&!EH(TL*x%A`f)ikAO<#-R)RgLfI&G|W&=yQ?QN>@9G!m`hd zhZAZ$Z~O6D)VZ=K<(3PM`^b~d_rl8$jk}IFo6!OEjL5C|J4CmevY>>-_bNEPjcJnJ zqQ)5Ohe!Ck%Sl-il zrqHI_-oW82_WtelyEV{aM1S`esaPGsgQ^CfmyO|pwp|SS+q^_QeOz*Zn+q)K3 z&Y?5vC76li4dI&s8JF=(`1>kD&xZN(hrVRIud$ZWpOA?)&z%AlbM}wUyR0@4*8{`5 zLjr~XYmn$vkboSb7XHbHq8v$re|;}J|K+J=&gXeVL{__(datAm z><;hEFLIgS6+tugg8+0k`;cFTL{GI=L)g4!YlX}<@hR8ghXJ?#Hud99h;1{Z8hGh+ zut&HQz~uU{Dhr)R=A|TGrxadk{l;Hn=*3LMHiVBay!|j*!3o=!_<;(#>!1<@N1B6Y z)kFy23GHF&Rqa(}yb+T$^La%Y8{s}T$ExFDdK;I&OAkXg2rZeGe2_xIwnP;vK_^My%PDw(y76u zuO#^qFB8nv^z=3P*_k%1w9;2X_D4PsleY)OCFS39l8cz&Bd+Zm{gD>MiCA@hxTemS z^UgH`^~h3Agh4KRMCu29AQ-zpABXKjjK74*U0n;v;QLO*brRqH-r)|ic)tO!*u0$- z3A6FFfa(;qhq>nEVy5KfdKs*Vzy(T2CR@GpC_Fl=Lk;A$zHL^1OCI_c1MQP`7so!e zUwm#tvU{ve#0i)4&^T-_Ea!8`==qBXw@TS7YV4Mq7mx1xo$sxeuqVld40Jc9oh!~T zP0!cTnbWS%@T^3>m-&Mo8)ieR>5*qSqs!3BMZ>niNNI(96(X@~_1(4Fykm4^<+5-T z7DWBnN;UcjakAuHQ44hL&>M_wg0+vB zx2mMPydDgbS>>qQ!V@%()C#$oBFF7fpKoDU9J`r@eDI1Y#jDzSd$gP772T`sJ}2RL znOHxjw+Ubo{&g149z;}wpD1o#yx%&fIQMNIUm*MV?DAZtXXE}ndjGK8SJy_j0g?93 zB$s0sftXyzrfcaGb26cHY!=bwE|JvRI>->i+4|ULRI-AwujJjJy*z&>&z4)-cB}DJ zf3VwqSKHEo|HI=1Ri<#(&IC{L>x$;m+@-Undl#LC)#pNc47`VJHs^OB!*$$q6h?kU z@lSk>_Vx?=S((Zy-IUtig_JjsZPO-UNBxuWz7trp;bcx9l<&vMX-@GzU^ThPI9ZBp zf{PIF-JfGj)pKNSi1hRZG)x-)uDPQxSx1=dEDH1$k*FMdlNGAdJVh26malSde$%nY zfJ$c!wYd^0hS-dd&v%X?G=bDOeHPZ&*qI{U&BDJ1X!BJk)qHp-Ub8L(rAxVbGAOlS zg3~^!Y-xZPAEF)}*CDrdjQj7wGnb3N5}SqdKI9Z9_=xtkDgNTr-!QFFJ!bPU{w>zi zr;fMo*PK@sqm@`@&QV@3FO-^L^Evy|&O=i8%p^JB=5Bn;Ylmzp(riy|&wS1Uug*Jc zQKkLld7n5*3)%!E66lpTwZ<=9W%x|z?tkbq9W=kW%gy&(O3Mx{xMkZ2jG)ka=Deo{ zRngs zfs_uL9I_Y{hnN!L+cA3NZXap0f+I4J=Sf?V26yq>%3E;W(TT%)7kRAB&ioNt)WZ*S zn}dDVFCsACGbD;GPvK~I*RwQRjAPEi%bULtN`nk$4Dg{ZPkk`iP3 zWW(f&<;d|8?FBkjGg%82DIbWaQ6v2Z+*9u}$w6ulx zA_D@wd;=1MB-;#S3O&8&C>$?yb`8PYLh85Y<+|qT#LO*S;pC-O;Oj*u#(XGAGvsed zC3Qxa!P`4KpkKmnS=lzZGkMtylM7QoowO7vzI1Aoo~SsPr_j^G^2E{|1Y0K%vMD#~ zF93g*JM*I*5|QS5QmL2m_wAOi{KlO%$|6(4iZBp}vVtj5OqBd!;(6s=-ivv_6~RR; zNaRqRt{Ph%c)FI`m*m|QlW8xh>{8k*UCU_j>v>2A+@H);?-W>AsXgI!_`tUP1D$V{ zlHzvw=A8f8!BLxO{Tmzfiic60{kbw~Tw4S0f_dA^tq=Tf$6@KOsbgEt`D#{f%WLj# zXR3f%y|964uhGrMLxv4e1ZMDS4GRJjmm{{Cu#YljHv6j!d!Mr!YB^uiBQQ7~n1^r4 z9PEaO)T8$!E)=ILd~B!;?lI-dR&FDjjGE6PGF#?h-J+rv!T8sa$F!I<=~5pLvM!Z+ z@8}iN1Uw(_Ufvslbx(TND6(1ACBEIn-e0PYvsv4PHqnC7C~}cN6eRj3*%o$Ywf)>Q zhnZXE15BUWlkZoH$s!!Z{^NP=Onb`f0fFs><4K&Dn3(l;EA6t4&kt)S6tSAEhp&pp zz_>Qa@p1}8(Ysqx!67OrHPe&k7eGHqew7g!aOmR7LwJT_YR+yJPt<(evaC1 z3-m7;yuH3dKRk%?6}cCC*`QbV3~TxMjBR@LLJO0FW1wcn#!|H>2&`(JE%0mbEUX`;hhHlMd6A z$zTcRc0tF7y#Y#J^52_dUq0X+o{ouLgk))w;6w1yC_Q$l1-APQ|Hnk^lqaYH>xF3w zH+h*}avfoBF4@k#JMK&Gnx>vxS6@ea?Y+($78^VFe}e7RJv){OScNSrTD9}WiNyFD zM+|STS#~usdgr!VcJprE3tO}5W0uyVcRvn`S!C@#CbNE7=-%Ehvub;-ikE-qU3*h! z{hZHYTQ~n@_p|GYay@Ik8-BIDnV)>+W!l$V;85YKzMGM8 zEMI=FoF(!1+^gGl*N>~|w`y)^KIKvy2)u{w$@Q*`8L7N;*X%F;n7D4E>-GEItrB}z zO>@8hpOHL4G9xf&l}P=W2SG`aGapsJ_en zN=1VQG7`=SEO|KtX0$p4b3L(=XxTgQY^mk!OM67V%YNH6eUa$%9+0I0F~Iinqg`=R zzKIB&C^g`yR-XO3Xdct_Z43Mq-<0aFn7qIMGUTr!pm0FNAyJIUR}(&7p5yg7=uY{K z*Ku88bBsZjIurs&TDo3W1x6uFM|ed6rz0*+pFi0hF(t5I2hedxOZRH%Lfi_rLsb_T zPA^ZNKMD3HWSAcAJ~6};MdKvkY{Zl=PoFYlnCJ~AhCxEwK?@joTC&qn=C2%q zy18Bz1xO%8k$?v!n@*kA{=NHtk5sPN5$dOg4{-GmxEs!Uq_hGsUx!GC_lb958)W9(jHNIglsJ z1Ul4M|C$>jTQM}+04LBsb(~*_loTBljDf+K7PqDsk-`|5DuHA3PXy;Xqgay$bkCVR z5z@#p^a(iOa8lW>9mSe6!0?z^xzP;SzfS^z4tKBNL$PKiXz2BGQZ9-Q7XuyM|3gL! z*&2Aq6e%H0a0fbE?xUp%vNb7cK=+*K-iqSG(SU?cgHsxiuF?sgGLE4npal-Br}nfI zZ*e&7wh=j7Ff>X4BZ!Ax9$9d~1YlZittr)zMvk>3z@-mK7C#UrDUj6)n%I4^+W983 zb_F-!yzJqF?8pg51300#8>zmvv4FO#r|0&qe?M literal 0 HcmV?d00001 From 3e410aed0b08eb6c238f7ac843c20028f2c4b4ae Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 00:55:09 +0200 Subject: [PATCH 012/293] upload of raspiblitz-v1.7.0-2021-04-24.img.gz --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a86fce63..70e4069d4 100644 --- a/README.md +++ b/README.md @@ -103,11 +103,11 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)|All of the code, don't trust, verify| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: -* SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 +* SHA-256: 82720a63b2503fb81634b511ef4b3cb5e2db6b9c734b915fdfcccccb8722e820 Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) From b83ef543f3ad57c005551339a6a7922ea43bf2bf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:15:08 +0200 Subject: [PATCH 013/293] update version 1.7.0 --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index c48eb3baa..7d5f23197 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,2 +1,2 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.7.0RC3" +codeVersion="1.7.0" From 81c63ba431f876751cfcbc5d86786ef5fcbc58dd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:47:31 +0200 Subject: [PATCH 014/293] upload image raspiblitz-v1.7.0-2021-04-25.img.gz --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 70e4069d4..f98bd5f9b 100644 --- a/README.md +++ b/README.md @@ -103,11 +103,11 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz.sig)|All of the code, don't trust, verify| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: -* SHA-256: 82720a63b2503fb81634b511ef4b3cb5e2db6b9c734b915fdfcccccb8722e820 +* SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) From e32d6d8570fde782d19d212ad2c9238717f64034 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:52:00 +0200 Subject: [PATCH 015/293] correct signature link for v1.7.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f98bd5f9b..40b8b16a0 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ In the end your RaspiBlitz should look like this: |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| |Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.img.gz.sig)|All of the code, don't trust, verify| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: * SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f From 582403a571b45bf31f44d9aa0c6d9dbf0afd3127 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sun, 25 Apr 2021 15:13:58 +0000 Subject: [PATCH 016/293] SECURITY.md typos (#2229) please correct this before v1.7 @rootzoll --- SECURITY.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index c30f8cc58..b50c4860b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,9 +2,9 @@ *NOTE: This document is just a first draft and still under contruction.* -Only use this software with funds you could afford to lose. Especially a lightning wallet is a hot wallet that has a constant connection to the internet and can be target of exploitation. +Only use this software with funds you could afford to lose. Especially a lightning wallet that is a hot wallet, which has constant connection to the internet and can be target of exploitation. -Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps the RaspiBlitz team cannot review all the code of those external projects. +Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps, the RaspiBlitz team cannot review all the code of those external projects. The software is provided "AS IS", without warrenty of any kind. In no event shall the authors or copyright holders be liable for any claim, damages or other @@ -54,20 +54,20 @@ Ensure that you put quotes around fingerprints containing spaces if importing wi # On-chain Funds -Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz. +Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz: ## Lightning Wallet (default) -The default is the on-chain lightning wallet - thats the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. +The default is the on-chain lightning wallet - that's the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup, you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. ## Bitcoin Core Wallet (deactivated by default) -Beside lightning you have a bitcoin core installed. Normally bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. +Beside lightning you have a bitcoin core installed. Normally, bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. Some apps (like Fully Noded or JoinMarket) activate the bitcoin core wallet and use it for their own needs. This on-chain balance will not be reflected in the rest of the RaspiBlitz software and is NOT backuped by the seed words from the RaspiBlitz setup. If you make use of the bitcoin core wallet please take care of these funds. # Off-chain Funds (Lightning Channels) -Please note that there is no perfect backup concept for the funds in your lightning channels yet. We recommend strongly to use the `Static Channel Backup` provided by LND and consider off-loctaion backup of that file to have the best chances to recover Lightning funds in a case desaster recovery. +Please note that there is no perfect backup concept for the funds in your lightning channels yet. We strongly recommend using the `Static Channel Backup` provided by LND and consider off-line location backup of that file to have the best chances to recover Lightning funds in a case of recoverying from a disaster. -For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) \ No newline at end of file +For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) From 6a1bb3841d2b50ab825b286c8343aeacd6e3bfef Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 26 Apr 2021 00:05:30 +0200 Subject: [PATCH 017/293] update README for v1.7.0 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 40b8b16a0..9dc2d2116 100644 --- a/README.md +++ b/README.md @@ -109,9 +109,13 @@ In the end your RaspiBlitz should look like this: If downloading the mantainer image, the shasum is: * SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f +The mantainer sd card image can also be downloaded via torrent: +* [assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent) + Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) * [How to update my RaspiBlitz?](README.md#updating-raspiblitz-to-new-version) +* [How to migrate to RaspiBlitz from Umbrel/myNode](#make-a-raspiblitz-out-of-your-umbrel-or-mynode) * [How to verify the SD card image after download?](FAQ.md#how-to-verify-the-sd-card-image-after-download) ## Write the SD-Card image to your SD Card From e1044d5a9486e5ca0f797e9b1c6b167fa7ab91ec Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 26 Apr 2021 00:22:23 +0200 Subject: [PATCH 018/293] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9dc2d2116..4e68ce2be 100644 --- a/README.md +++ b/README.md @@ -954,7 +954,7 @@ Then the blockchain needs to sync up and you should be back to normal. Another kind of migration is when you already run an full node with the Umbrel or myNode software and you like to change it to RaspiBlitz without closing channels. You basically have all the hardware needed and just need to change software. You dont need the [LCD from the shopping list](#amazon-shopping-list-buy-parts--build-it-yourself) - RaspiBlitz can also run without an LCD. -*NOTE: This migration is still expirimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* +*NOTE: This migration is still experimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* Before you start migration: * if you have on-chain funds on your old node - make sure to have the backup seed words From 4d7cba6bb95381e3e6778a6e1c78cc7dad6b3eee Mon Sep 17 00:00:00 2001 From: Animalmother9000 <48626097+Animalmother9000@users.noreply.github.com> Date: Thu, 29 Apr 2021 22:32:22 +0200 Subject: [PATCH 019/293] List all compatible displays on Amazon (#2253) Give some alternatives if the mentioned display is sold out on Amazon --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4e68ce2be..8482856b1 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,11 @@ The cheapest way is to buy and assemble the single parts yourself. There are two * SSD-case - UGREEN 2.5" External USB 3.0 Hard Disk Case with UASP support : [amazon referral link](https://geni.us/raspiblitz-ssd-case) * MicroSDCard 32GB - Samsung PRO Endurance 32 GB microSDHC UHS-I U1: [amazon referral link](https://geni.us/raspiblitz-sc-card) * LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) + - There are different vendors for the screen on Amazon. If the above mentioned screen is sold out you can also use these: + - Quimat 3,5'' Zoll Inch Touch + - ELEGOO Display 3.5" Zoll TFT LCD + - kuman 3.5 Inch Touch Screen TFT Monitor + - Waveshare 3.5inch Display for Raspberry Pi * Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* From 55fc8050813e569c548ea0e4b6f7976f810b166b Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Thu, 29 Apr 2021 22:38:53 +0200 Subject: [PATCH 020/293] #2243 formatting info on additional screen vendors --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8482856b1..2b013979f 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,14 @@ The cheapest way is to buy and assemble the single parts yourself. There are two * 1TB SSD - SanDisk SSD Plus 1TB 2.5" : [amazon referral link](https://geni.us/raspiblitz-1000gb-san) *other 1TB SSD models might cause power issues* * SSD-case - UGREEN 2.5" External USB 3.0 Hard Disk Case with UASP support : [amazon referral link](https://geni.us/raspiblitz-ssd-case) * MicroSDCard 32GB - Samsung PRO Endurance 32 GB microSDHC UHS-I U1: [amazon referral link](https://geni.us/raspiblitz-sc-card) +* Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) * LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) - - There are different vendors for the screen on Amazon. If the above mentioned screen is sold out you can also use these: + +*If the above mentioned LCD screen is sold out you can also use these different vendors for the screen on Amazon:* - Quimat 3,5'' Zoll Inch Touch - ELEGOO Display 3.5" Zoll TFT LCD - kuman 3.5 Inch Touch Screen TFT Monitor - Waveshare 3.5inch Display for Raspberry Pi -* Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* From d5f8a6ad5f134995061865ff571309479672eb09 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 29 Apr 2021 22:49:30 +0200 Subject: [PATCH 021/293] #2247 add HTTP code as debug info --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index b3c83fc10..beecb5ef3 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -748,7 +748,7 @@ def subscription_detail(): except Exception as e: sub['https_response'] = 0 if sub['https_response']!=200 and len(sub['warning'])==0: - sub['warning'] = "Not able to get HTTPS response." + sub['warning'] = "Not able to get HTTPS response ({0}).".format(sub['https_response']) print(json.dumps(sub, indent=2)) From 60b84998decb2e4f8b020959c299ec074242bfde Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 30 Apr 2021 12:44:24 +0200 Subject: [PATCH 022/293] test refector --- home.admin/00prepareSystem.sh | 11 +++ home.admin/00provisionDialog.sh | 157 ++++++++++++++++++++++++++++++++ home.admin/00provisionInfo.sh | 14 +++ 3 files changed, 182 insertions(+) create mode 100755 home.admin/00prepareSystem.sh create mode 100755 home.admin/00provisionDialog.sh create mode 100755 home.admin/00provisionInfo.sh diff --git a/home.admin/00prepareSystem.sh b/home.admin/00prepareSystem.sh new file mode 100755 index 000000000..e09dc26c8 --- /dev/null +++ b/home.admin/00prepareSystem.sh @@ -0,0 +1,11 @@ +#!/bin/bash + + +# TODO: ON BASIC BITCOIN CONFIG +###### OPTIMIZE IF RAM >1GB +kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') +if [ ${kbSizeRAM} -gt 1500000 ]; then + echo "Detected RAM >1GB --> optimizing ${network}.conf" + sudo sed -i "s/^dbcache=.*/dbcache=512/g" /home/admin/assets/bitcoin.conf + sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /home/admin/assets/bitcoin.conf +fi \ No newline at end of file diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh new file mode 100755 index 000000000..e6129b2f8 --- /dev/null +++ b/home.admin/00provisionDialog.sh @@ -0,0 +1,157 @@ +#!/bin/bash +_temp=$(mktemp -p /dev/shm/) + +## get basic info +INFOFILE +source /home/admin/raspiblitz.info + +# CHECK BASICS HDD info and react to no or too small HDD + +# prepare the config file (what will later become the raspiblitz.config) +source /home/admin/_version.info +CONFIGFILE="/home/admin/raspiblitz.config.tmp" +rm $CONFIGFILE 2>/dev/null +echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE +echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE +echo "lcdrotate=1" >> $CONFIGFILE + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE + +# choose blockchain or select migration +OPTIONS=() +OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") +OPTIONS+=(LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)") +OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") +CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Welcome to your RaspiBlitz ⚡" \ + --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ + 12 64 6 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) +clear +network="" +migration="raspiblitz" +case $CHOICE in + CLOSE) + # TODO: check if case every comes up + echo "CLOSE" + exit 1; + ;; + BITCOIN) + network="bitcoin" + echo "network=bitcoin" >> $CONFIGFILE + ;; + LITECOIN) + network="litecoin" + echo "network=litecoin" >> $CONFIGFILE + ;; + MIGRATION) + migration=raspiblitz + echo "migration=raspiblitz" >> $SETUPFILE + ;; +esac + +if [ "${migration}" == "raspiblitz" ]; then + + + +fi + + +sudo /home/admin/config.scripts/blitz.migration.sh "import-gui" +# on error clean & repeat +if [ "$?" = "1" ]; then + echo + echo "# clean and unmount for next try" + sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null + sudo umount /mnt/hdd 2>/dev/null + sudo umount /mnt/storage 2>/dev/null + sudo umount /mnt/temp 2>/dev/null + sleep 2 + /home/admin/00raspiblitz.sh +fi +exit 0 + + +################### +# ENTER NAME +################### + +# welcome and ask for name of RaspiBlitz +result="" +while [ ${#result} -eq 0 ] + do + l1="Please enter the name of your new RaspiBlitz:\n" + l2="one word, keep characters basic & not too long" + dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) + shred -u $_temp + echo "processing ..." + sleep 3 + done + +# set lightning alias +sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf + +# store hostname for later - to be set right before the next reboot +# work around - because without a reboot the hostname seems not updates in the whole system +valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=") +if [ ${valueExistsInInfoFile} -eq 0 ]; then + # add + echo "hostname=${result}" >> /home/admin/raspiblitz.info +else + # update + sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info +fi + +################### +# ENTER PASSWORDS +################### + +# show password info dialog +dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords. +Referenced as password A, B, C and D. + +A) Master User Password +B) Blockchain RPC Password +C) LND Wallet Password +D) LND Seed Password + +Choose now 4 new passwords - all min 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 15 52 + +# call set password a script +sudo /home/admin/config.scripts/blitz.setpassword.sh a + +# sucess info dialog +dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 + +# call set password b script +sudo /home/admin/config.scripts/blitz.setpassword.sh b + +# success info dialog +dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52 + +################### +# TOR BY DEFAULT +# https://github.com/rootzoll/raspiblitz/issues/592 +# +################### +echo "runBehindTor=on" >> /home/admin/raspiblitz.info +#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n +#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on. +# " 12 75 +#if [ $? -eq 1 ]; then +# echo "runBehindTor=on" >> /home/admin/raspiblitz.info +#fi + +# set SetupState +sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info + +clear \ No newline at end of file diff --git a/home.admin/00provisionInfo.sh b/home.admin/00provisionInfo.sh new file mode 100755 index 000000000..a2796a09c --- /dev/null +++ b/home.admin/00provisionInfo.sh @@ -0,0 +1,14 @@ +#!/bin/bash +_temp=$(mktemp -p /dev/shm/) + +## get basic info +source /home/admin/raspiblitz.info 2>/dev/null + +################### +# CHECK IF DNS NEEDS SETTING DURING SETUP +# https://github.com/rootzoll/raspiblitz/issues/787 +################### +sudo /home/admin/config.scripts/internet.dns.sh test + +# TODO: if DNS is not working --> ask in provision dialog +# TODO: get size of sd card & free space on sd card \ No newline at end of file From 80d8fa3e60df686d987e736f6ef1a10d88152915 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Fri, 30 Apr 2021 10:43:34 +0000 Subject: [PATCH 023/293] change force to yes on installation (#2254) --- home.admin/config.scripts/blitz.ups.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.ups.sh b/home.admin/config.scripts/blitz.ups.sh index 5cc2af090..db6b9cdfe 100755 --- a/home.admin/config.scripts/blitz.ups.sh +++ b/home.admin/config.scripts/blitz.ups.sh @@ -26,7 +26,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # see video: https://www.youtube.com/watch?v=6UrknowJ12o # installs apcupsd.service - sudo apt-get install -f apcupsd + sudo apt-get install -y apcupsd # edit config: /etc/apcupsd/apcupsd.conf sudo systemctl stop apcupsd From 9605e6a765becfd9b5f6aac60a8e43ca01d0c448 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 30 Apr 2021 23:54:16 +0200 Subject: [PATCH 024/293] more status from migration --- home.admin/config.scripts/blitz.migration.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index dd98c15b2..335811f15 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -41,6 +41,8 @@ scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" echo "isBTRFS=${isBTRFS}" + echo "localip=\"${localip}\"" + echo "defaultZipPath=\"${defaultZipPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" echo "scpUploadUnix=\"${scpUploadUnix}\"" echo "scpDownloadWin=\"${scpDownloadWin}\"" From 3abbb38d728164fe4fac7d0a9792a84da7f2368e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:23:49 +0200 Subject: [PATCH 025/293] basic migration ssh dialog --- home.admin/00migrationDialog.sh | 237 ++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100755 home.admin/00migrationDialog.sh diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh new file mode 100755 index 000000000..1cf0d33d4 --- /dev/null +++ b/home.admin/00migrationDialog.sh @@ -0,0 +1,237 @@ +#!/bin/bash + +# TODO: also the migration might need to be adapted to work with an already mounted HDD later + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# dialog to get all data needed for migration-setup" + echo "# 00migrationDialog.sh [raspiblitz|mynode|umbrel]" + exit 1 +fi + +## get basic info +source /home/admin/raspiblitz.info + +# tempfile for result of dialogs +_temp=$(mktemp -p /dev/shm/) + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE + +# flags of what passwords are to set by user +setPasswordA=1 +setPasswordB=0 +setPasswordC=0 + +# 1st PARAMATER: [raspiblitz|mynode|umbrel] +migrationOS="$1" +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "raspiblitz" ]; then + echo "parameter1(${migrationOS})" + echo "error='not supported'" + exit 1 +fi + +# 2nd PARAMATER (optional): the version of the former fullnode OS if available +migrationVersion="$2" + +#################################################### +# RASPIBLITZ +# migrating from other hardware with migration file +#################################################### + +if [ "${migrationOS}" == "raspiblitz" ]; then + + # infodialog + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='${migrationOS}'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # get defaultZipPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.migration.sh status) + + # make sure that temp directory exists and can be written by admin + sudo mkdir -p ${defaultZipPath} + sudo chmod 777 -R ${defaultZipPath} + + # scp upload info + clear + echo + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + + countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + + # in case no upload found + if [ ${countZips} -eq 0 ]; then + echo + echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "Shutting down ... please make fesh sd card & try again." + sleep 3 + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # in case of multiple files + if [ ${countZips} -gt 1 ]; then + echo + echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "Shutting down ... please make fesh sd card & try again." + sleep 3 + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # further checks and unpacking will be done when migration is processed (not part of dialog) + + echo + echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" + echo "PRESS ENTER TO CONTINUE" + read key + + # user needs to reset password A + setPasswordA=1 + +fi + +#################################################### +# UMBREL +# migrating from Umbrel to RaspiBlitz +#################################################### + +if [ "${migrationOS}" == "umbrel" ]; then + + # infodialog + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='umbrel'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # user needs to reset password A + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +fi + +#################################################### +# MYNODE +# migrating from myNode to RaspiBlitz +#################################################### + +if [ "${migrationOS}" == "mynode" ]; then + + # infodialog + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from MYNODE + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your MYNODE seed words & static channel backup file (just in case). Also any data of additional apps you had installed on MYNODE might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='mynode'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # user needs to reset password A + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +fi + +#################################################### +# INPUT PASSWORDS (based on flags above set) + +# dynamic info string on what passwords need to be changed +passwordinfo="A" # always so far +if [ ${setPasswordB} -eq 1 ]; then + passwordinfo = "${passwordinfo}, B" +fi +if [ ${setPasswordC} -eq 1 ]; then + passwordinfo = "${passwordinfo}, C" +fi + +# basic information in RaspiBlitz passwords +dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + +In general RaspiBlitz works with 3 different passwords: +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (RPC & Additional Apps) +PASSWORD C) Lightning Wallet Unlock Password + +You will need to set Password: ${passwordinfo} +(other passwords might stay like on your old node) + +Follow Password Rules: Minimal of 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 17 52 + +if [ ${setPasswordA} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp + password=$(sudo cat $_temp) + echo "passwordA='${password}'" >> $SETUPFILE +fi + +if [ ${setPasswordB} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp + password=$(sudo cat $_temp) + echo "passwordB='${password}'" >> $SETUPFILE +fi + +if [ ${setPasswordC} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp + password=$(sudo cat $_temp) + echo "passwordC='${password}'" >> $SETUPFILE +fi \ No newline at end of file From c78f110a9e8311094f8d08b31cd9d35558629a08 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:33:14 +0200 Subject: [PATCH 026/293] rename cancel --- home.admin/00migrationDialog.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 1cf0d33d4..62b05594e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. From ff752e853b623749ebd04bd1fc65e868bdba3ffe Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:34:29 +0200 Subject: [PATCH 027/293] cancel/shutdown --- home.admin/00migrationDialog.sh | 6 +-- home.admin/00provisionDialog.sh | 84 +++++++++++++++++++++++++-------- 2 files changed, 68 insertions(+), 22 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 62b05594e..04adad791 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index e6129b2f8..22ffa34dd 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -2,10 +2,10 @@ _temp=$(mktemp -p /dev/shm/) ## get basic info -INFOFILE source /home/admin/raspiblitz.info -# CHECK BASICS HDD info and react to no or too small HDD +# set place where zipped TAR file gets stored on migration dialog +defaultZipPath="/mnt/hdd/temp" # prepare the config file (what will later become the raspiblitz.config) source /home/admin/_version.info @@ -34,7 +34,7 @@ CHOICE=$(dialog --clear \ 2>&1 >/dev/tty) clear network="" -migration="raspiblitz" +migration="" case $CHOICE in CLOSE) # TODO: check if case every comes up @@ -50,33 +50,79 @@ case $CHOICE in echo "network=litecoin" >> $CONFIGFILE ;; MIGRATION) - migration=raspiblitz + migration="raspiblitz" echo "migration=raspiblitz" >> $SETUPFILE ;; esac +# IMPORT MIGRATION DIALOG +# if fails then restart the complete provision dialog if [ "${migration}" == "raspiblitz" ]; then + # make sure that temp directory exists and can be written by admin + sudo mkdir -p ${defaultZipPath} + sudo chmod 777 -R ${defaultZipPath} + clear + echo + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + + # in case no upload found + if [ ${countZips} -eq 0 ]; then + echo + echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "error='no file found'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + # in case of multiple files + if [ ${countZips} -gt 1 ]; then + echo + echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "error='multiple files'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + # unzip migration file and check + echo + echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" + source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") + if [ ${#error} -gt 0 ]; then + echo + echo "# FAIL: Was not able to restore data" + echo "error='${error}'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + echo + echo "OK: Migration data was imported - will now recover/restore RaspiBlitz with this data" + echo "PRESS ENTER TO CONTINUE" + read key + exit 0 fi -sudo /home/admin/config.scripts/blitz.migration.sh "import-gui" -# on error clean & repeat -if [ "$?" = "1" ]; then - echo - echo "# clean and unmount for next try" - sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null - sudo umount /mnt/hdd 2>/dev/null - sudo umount /mnt/storage 2>/dev/null - sudo umount /mnt/temp 2>/dev/null - sleep 2 - /home/admin/00raspiblitz.sh -fi -exit 0 - - ################### # ENTER NAME ################### From f90ced107c825f4e373b4e06d15a4c6cdfe8e385 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:36:12 +0200 Subject: [PATCH 028/293] shutdown --- home.admin/00migrationDialog.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 04adad791..62b05594e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. From 121b76f9279b0fa501d7bd9a0ce6761dcf727969 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:39:18 +0200 Subject: [PATCH 029/293] password info --- home.admin/00migrationDialog.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 62b05594e..91148a806 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -205,7 +205,7 @@ fi # basic information in RaspiBlitz passwords dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. -In general RaspiBlitz works with 3 different passwords: +RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) PASSWORD B) APP Password (RPC & Additional Apps) PASSWORD C) Lightning Wallet Unlock Password @@ -216,7 +216,7 @@ You will need to set Password: ${passwordinfo} Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. -" 17 52 +" 17 64 if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp From 8e00e909351459eebc0b44d7b236c353157c7640 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:46:09 +0200 Subject: [PATCH 030/293] set password sets --- home.admin/00migrationDialog.sh | 3 +++ home.admin/config.scripts/blitz.setpassword.sh | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 91148a806..92796b5c2 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -222,16 +222,19 @@ if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) echo "passwordA='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 fi if [ ${setPasswordB} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) echo "passwordB='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 fi if [ ${setPasswordC} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 fi \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 9e7c6f14d..9f43fa998 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -69,9 +69,6 @@ if [ ${#abcd} -eq 0 ]; then esac fi -echo "Changing Password ${abcd} ..." -echo "" - ############################ # PASSWORD A if [ "${abcd}" = "a" ]; then From b17043d51458160aa75804b65ff903e2be0a1e5e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:48:15 +0200 Subject: [PATCH 031/293] clear info --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 92796b5c2..bc39c8708 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -217,6 +217,7 @@ Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. " 17 64 +clear if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp From fa965a6bd6ae5e5f488b76e45096b1fb29509e41 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:52:31 +0200 Subject: [PATCH 032/293] change text --- home.admin/00migrationDialog.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index bc39c8708..aece87c1e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -208,7 +208,7 @@ dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Unlock Password +PASSWORD C) Lightning Wallet Password for Unlock You will need to set Password: ${passwordinfo} (other passwords might stay like on your old node) @@ -217,9 +217,9 @@ Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. " 17 64 -clear if [ ${setPasswordA} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) echo "passwordA='${password}'" >> $SETUPFILE @@ -227,6 +227,7 @@ if [ ${setPasswordA} -eq 1 ]; then fi if [ ${setPasswordB} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) echo "passwordB='${password}'" >> $SETUPFILE @@ -234,6 +235,7 @@ if [ ${setPasswordB} -eq 1 ]; then fi if [ ${setPasswordC} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE From 8aab2fd700e8bcc2d81276a94cb9d06051fa9385 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:06:55 +0200 Subject: [PATCH 033/293] change setup file --- home.admin/00migrationDialog.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index aece87c1e..3a58ee4e5 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -16,7 +16,7 @@ source /home/admin/raspiblitz.info _temp=$(mktemp -p /dev/shm/) # prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" +SETUPFILE="/home/admin/raspiblitz.setup" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE @@ -240,4 +240,9 @@ if [ ${setPasswordC} -eq 1 ]; then password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -fi \ No newline at end of file +fi + +clear +echo "# data from dialogs stored in to be further processed:" +echo "${SETUPFILE}" +exit 0 \ No newline at end of file From e2d80a4a57fa14ee81daf7963163d30d8991f65d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:08:59 +0200 Subject: [PATCH 034/293] fix parameter check --- home.admin/00migrationDialog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 3a58ee4e5..3de1c2a82 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -27,7 +27,7 @@ setPasswordC=0 # 1st PARAMATER: [raspiblitz|mynode|umbrel] migrationOS="$1" -if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "raspiblitz" ]; then +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then echo "parameter1(${migrationOS})" echo "error='not supported'" exit 1 From d5971c00068109575b7668df011ae4baf60aadb9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:22:38 +0200 Subject: [PATCH 035/293] remove info dialog from raspiblitz migration --- home.admin/00migrationDialog.sh | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 3de1c2a82..7d32a03b8 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -43,25 +43,9 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then - # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL - -You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. - -Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. - -Do you want to start migration to RaspiBlitz now? - " 16 58 - - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='${migrationOS}'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi + # write migration info + echo "migrationOS='${migrationOS}'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) @@ -111,7 +95,6 @@ Do you want to start migration to RaspiBlitz now? fi # further checks and unpacking will be done when migration is processed (not part of dialog) - echo echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" echo "PRESS ENTER TO CONTINUE" From 7e2c34c36d92d83e2446f9a07353d8dda4874752 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:26:39 +0200 Subject: [PATCH 036/293] fix typo --- home.admin/00migrationDialog.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 7d32a03b8..233e94fb0 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -76,9 +76,8 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case no upload found if [ ${countZips} -eq 0 ]; then - echo echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" - echo "Shutting down ... please make fesh sd card & try again." + echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE exit 1 @@ -86,19 +85,16 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then - echo echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" - echo "Shutting down ... please make fesh sd card & try again." + echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE exit 1 fi # further checks and unpacking will be done when migration is processed (not part of dialog) - echo - echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" - echo "PRESS ENTER TO CONTINUE" - read key + echo "OK: Migration data was imported - will process after password reset" + sleep 4 # user needs to reset password A setPasswordA=1 From 870404a2fb9d2ff891224132ffd03a69fce4952b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:48:31 +0200 Subject: [PATCH 037/293] change upload path --- home.admin/config.scripts/blitz.migration.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 335811f15..b8092a301 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -26,7 +26,7 @@ isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) # set place where zipped TAR file gets stored -defaultZipPath="/mnt/hdd/temp" +defaultZipPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) From cadefa666dbd267d5b0f505b0420791449f12024 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:51:05 +0200 Subject: [PATCH 038/293] add chown --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 233e94fb0..e639baf5a 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -53,6 +53,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # make sure that temp directory exists and can be written by admin sudo mkdir -p ${defaultZipPath} sudo chmod 777 -R ${defaultZipPath} + sudo chown admin:admin ${defaultZipPath} # scp upload info clear From 4a80e9d44c117aafaa5f05572ede8572275720de Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:54:22 +0200 Subject: [PATCH 039/293] clear directory --- home.admin/00migrationDialog.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index e639baf5a..0840915c7 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -50,10 +50,10 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} - sudo chown admin:admin ${defaultZipPath} + # make sure that temp directory exists, is clear and can be written by admin + sudo mkdir -p ${defaultZipPath} 2>/dev/null + sudo rm /mnt/hdd/temp/migration/* + sudo chown -R admin:admin ${defaultZipPath} # scp upload info clear From ddd3e952cfaadbfc255523a2bf1f8bcecef1fca9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:07:40 +0200 Subject: [PATCH 040/293] try with user bitcoin --- home.admin/00migrationDialog.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 0840915c7..aec01b9d8 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -50,10 +50,10 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) - # make sure that temp directory exists, is clear and can be written by admin + # make sure that temp directory exists, is clear and can be written by user bitcoin sudo mkdir -p ${defaultZipPath} 2>/dev/null - sudo rm /mnt/hdd/temp/migration/* - sudo chown -R admin:admin ${defaultZipPath} + sudo rm /mnt/hdd/temp/migration/* 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultZipPath} 2>/dev/null # scp upload info clear @@ -67,7 +67,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." From 4f885a755f2b18023232e1bb9b9aa67d88b4e454 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:11:28 +0200 Subject: [PATCH 041/293] add migration file --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index aec01b9d8..c21ae83eb 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -95,6 +95,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" + echo "migrationFile='${defaultZipPath}'" >> $SETUPFILE sleep 4 # user needs to reset password A From 9acdc1d0395a2db377eec42095965d797bc1def5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:19:03 +0200 Subject: [PATCH 042/293] exit to terminal --- home.admin/00provisionDialog.sh | 106 +++++++------------------------- 1 file changed, 21 insertions(+), 85 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 22ffa34dd..4105d6014 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -4,22 +4,6 @@ _temp=$(mktemp -p /dev/shm/) ## get basic info source /home/admin/raspiblitz.info -# set place where zipped TAR file gets stored on migration dialog -defaultZipPath="/mnt/hdd/temp" - -# prepare the config file (what will later become the raspiblitz.config) -source /home/admin/_version.info -CONFIGFILE="/home/admin/raspiblitz.config.tmp" -rm $CONFIGFILE 2>/dev/null -echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE -echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE -echo "lcdrotate=1" >> $CONFIGFILE - -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE - # choose blockchain or select migration OPTIONS=() OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") @@ -34,7 +18,6 @@ CHOICE=$(dialog --clear \ 2>&1 >/dev/tty) clear network="" -migration="" case $CHOICE in CLOSE) # TODO: check if case every comes up @@ -47,81 +30,34 @@ case $CHOICE in ;; LITECOIN) network="litecoin" - echo "network=litecoin" >> $CONFIGFILE ;; MIGRATION) - migration="raspiblitz" - echo "migration=raspiblitz" >> $SETUPFILE + # send over to the migration dialogs + /home/admin/00migrationDialog.sh raspiblitz + exit 0 ;; esac -# IMPORT MIGRATION DIALOG -# if fails then restart the complete provision dialog -if [ "${migration}" == "raspiblitz" ]; then - - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} - - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key - - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" - echo "error='no file found'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" - echo "error='multiple files'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - # unzip migration file and check - echo - echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") - if [ ${#error} -gt 0 ]; then - echo - echo "# FAIL: Was not able to restore data" - echo "error='${error}'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - echo - echo "OK: Migration data was imported - will now recover/restore RaspiBlitz with this data" - echo "PRESS ENTER TO CONTINUE" - read key - exit 0 +# on cancel - exit to terminal +if [ "${network}" == "" ]; then + echo "# exit to terminal" + exit 1 fi +# prepare the config file (what will later become the raspiblitz.config) +source /home/admin/_version.info +CONFIGFILE="/home/admin/raspiblitz.config.tmp" +rm $CONFIGFILE 2>/dev/null +echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE +echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE +echo "lcdrotate=1" >> $CONFIGFILE +echo "network=${network}" >> $CONFIGFILE +echo "chain=main" >> $CONFIGFILE + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE ################### # ENTER NAME From 0ff45a80a5ab917fab188e5f4c17ac6fac28d8bb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:19:53 +0200 Subject: [PATCH 043/293] remove old config file value --- home.admin/00provisionDialog.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 4105d6014..08384f920 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -26,7 +26,6 @@ case $CHOICE in ;; BITCOIN) network="bitcoin" - echo "network=bitcoin" >> $CONFIGFILE ;; LITECOIN) network="litecoin" From 3a4c6eb42753f00905e081773d9c14a37fbab0e8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:42:22 +0200 Subject: [PATCH 044/293] extend initial choice --- home.admin/00provisionDialog.sh | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 08384f920..ab30c8901 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -1,34 +1,39 @@ #!/bin/bash -_temp=$(mktemp -p /dev/shm/) -## get basic info +# get basic info source /home/admin/raspiblitz.info +# temp file for dialog results +_temp=$(mktemp -p /dev/shm/) + # choose blockchain or select migration OPTIONS=() -OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") -OPTIONS+=(LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)") +OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") +OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") +OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Welcome to your RaspiBlitz ⚡" \ --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ - 12 64 6 \ + 13 64 7 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear network="" +lightning="" case $CHOICE in - CLOSE) - # TODO: check if case every comes up - echo "CLOSE" - exit 1; - ;; - BITCOIN) + BITCOIN1) network="bitcoin" + lightning="lnd" + ;; + BITCOIN2) + network="bitcoin" + lightning="cln" ;; LITECOIN) network="litecoin" + lightning="lnd" ;; MIGRATION) # send over to the migration dialogs @@ -39,7 +44,8 @@ esac # on cancel - exit to terminal if [ "${network}" == "" ]; then - echo "# exit to terminal" + echo "# you selected cancel - exited to terminal" + echo "# use command to reboot --> restart" exit 1 fi @@ -50,6 +56,7 @@ rm $CONFIGFILE 2>/dev/null echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE echo "lcdrotate=1" >> $CONFIGFILE +echo "lightning=${lightning}" >> $CONFIGFILE echo "network=${network}" >> $CONFIGFILE echo "chain=main" >> $CONFIGFILE @@ -58,6 +65,9 @@ SETUPFILE="/home/admin/raspiblitz.setup.tmp" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE +echo "TODO: continue with further " +exit 1 + ################### # ENTER NAME ################### From 7d3b3a19a5dec218af86d5565ed66ad57521a192 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 15:49:13 +0200 Subject: [PATCH 045/293] provision dialog rework --- home.admin/00provisionDialog.sh | 157 ++++++++++++++++++++++---------- 1 file changed, 110 insertions(+), 47 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index ab30c8901..f172444ba 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -6,6 +6,11 @@ source /home/admin/raspiblitz.info # temp file for dialog results _temp=$(mktemp -p /dev/shm/) +# flags of what passwords are to set by user +setPasswordA=1 +setPasswordB=1 +setPasswordC=1 + # choose blockchain or select migration OPTIONS=() OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") @@ -45,7 +50,7 @@ esac # on cancel - exit to terminal if [ "${network}" == "" ]; then echo "# you selected cancel - exited to terminal" - echo "# use command to reboot --> restart" + echo "# use command 'restart' to reboot & start again" exit 1 fi @@ -59,15 +64,13 @@ echo "lcdrotate=1" >> $CONFIGFILE echo "lightning=${lightning}" >> $CONFIGFILE echo "network=${network}" >> $CONFIGFILE echo "chain=main" >> $CONFIGFILE +echo "runBehindTor=on" >> $CONFIGFILE # prepare the setup file (that constains info just needed for the rest of setup process) SETUPFILE="/home/admin/raspiblitz.setup.tmp" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE -echo "TODO: continue with further " -exit 1 - ################### # ENTER NAME ################### @@ -84,65 +87,125 @@ while [ ${#result} -eq 0 ] echo "processing ..." sleep 3 done +echo "hostname=${result}" >> $CONFIGFILE -# set lightning alias -sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf +################### +# DECIDE LIGHTNING +# do this before passwords, because password C not needed if LND rescue file is uploaded +################### + +# flags for sub dialogs after choice +uploadLNDRESCUE=0 +enterSEED=0 +uploadSCB=0 + +OPTIONS=() +OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") +OPTIONS+=(OLD "I had an old Node I want to recover/restore") +CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +if [ "${CHOICE}" == "NEW" ]; then + + # mark all passwords to be set at the end + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +elif [ "${CHOICE}" == "OLD" ]; then + + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + if [ "${CHOICE}" == "LNDRESCUE" ]; then + + # just activate LND rescue upload + uploadLNDRESCUE=1 + + # dont set password c anymore later on + setPasswordC=0 + + elif [ "${CHOICE}" == "SEED+SCB" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 + + elif [ "${CHOICE}" == "ONLYSEED" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi -# store hostname for later - to be set right before the next reboot -# work around - because without a reboot the hostname seems not updates in the whole system -valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=") -if [ ${valueExistsInInfoFile} -eq 0 ]; then - # add - echo "hostname=${result}" >> /home/admin/raspiblitz.info else - # update - sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 +fi + +# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) +if [ ${uploadLNDRESCUE} -eq 1 ]; then + echo "TODO: UPLOAD LND RESCUE FILE" + exit 1 +fi + + +# INPUT LIGHTNING SEED dialog (if activated by dialogs above) +if [ ${enterSEED} -eq 1 ]; then + echo "TODO: INPUT LIGHTNING SEED" + exit 1 +fi + +# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) +if [ ${uploadSCB} -eq 1 ]; then + echo "TODO: UPLOAD STATIC CHANNEL BACKUP FILE" + exit 1 fi ################### -# ENTER PASSWORDS +# ENTER PASSWORDS ---> combine with migration dialog to reduce code duplication ################### # show password info dialog -dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords. -Referenced as password A, B, C and D. +dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. +Referenced as password A, B & C. -A) Master User Password -B) Blockchain RPC Password -C) LND Wallet Password -D) LND Seed Password +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (RPC & Additional Apps) +PASSWORD C) Lightning Wallet Password for Unlock -Choose now 4 new passwords - all min 8 chars, +Set now the 3 passwords - all min 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. -" 15 52 +" 15 54 -# call set password a script -sudo /home/admin/config.scripts/blitz.setpassword.sh a +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp +password=$(sudo cat $_temp) +echo "passwordA='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 -# sucess info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp +password=$(sudo cat $_temp) +echo "passwordB='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 -# call set password b script -sudo /home/admin/config.scripts/blitz.setpassword.sh b +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp +password=$(sudo cat $_temp) +echo "passwordC='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -# success info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52 - -################### -# TOR BY DEFAULT -# https://github.com/rootzoll/raspiblitz/issues/592 -# -################### -echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n -#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on. -# " 12 75 -#if [ $? -eq 1 ]; then -# echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#fi - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info +echo "TODO: continue with further " +exit 1 clear \ No newline at end of file From ef910efd9b6fdf145129342e0d1be6bf4765ec23 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 18:27:23 +0200 Subject: [PATCH 046/293] update config scripts --- home.admin/config.scripts/blitz.migration.sh | 44 ++++++++++---------- home.admin/config.scripts/lnd.rescue.sh | 16 ++++++- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index b8092a301..79f06024c 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -26,23 +26,23 @@ isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) # set place where zipped TAR file gets stored -defaultZipPath="/mnt/hdd/temp/migration" +defaultUploadPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) # SCP download and upload links -scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz' ./" -scpDownloadWin="scp -r bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz ." -scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" -scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" +scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./" +scpDownloadWin="scp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ." +scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" +scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" echo "isBTRFS=${isBTRFS}" echo "localip=\"${localip}\"" - echo "defaultZipPath=\"${defaultZipPath}\"" + echo "defaultUploadPath=\"${defaultUploadPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" echo "scpUploadUnix=\"${scpUploadUnix}\"" echo "scpDownloadWin=\"${scpDownloadWin}\"" @@ -312,23 +312,23 @@ if [ "$1" = "export" ]; then # zip it echo "# Building the Export File (this can take some time) .." - sudo tar -zcvf ${defaultZipPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null + sudo tar -zcvf ${defaultUploadPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null # get md5 checksum echo "# Building checksum (can take also a while) ..." - md5checksum=$(md5sum ${defaultZipPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) + md5checksum=$(md5sum ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) echo "md5checksum=${md5checksum}" # get byte size - bytesize=$(wc -c ${defaultZipPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) + bytesize=$(wc -c ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) echo "bytesize=${bytesize}" # final renaming name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz" - echo "exportpath='${defaultZipPath}'" + echo "exportpath='${defaultUploadPath}'" echo "filename='${name}'" - sudo mv ${defaultZipPath}/raspiblitz-export-temp.tar.gz ${defaultZipPath}/${name} - sudo chown bitcoin:bitcoin ${defaultZipPath}/${name} + sudo mv ${defaultUploadPath}/raspiblitz-export-temp.tar.gz ${defaultUploadPath}/${name} + sudo chown bitcoin:bitcoin ${defaultUploadPath}/${name} # delete temp files rm ~/.exclude.temp @@ -343,7 +343,7 @@ fi if [ "$1" = "export-gui" ]; then # cleaning old migration files from blitz - sudo rm ${defaultZipPath}/*.tar.gz 2>/dev/null + sudo rm ${defaultUploadPath}/*.tar.gz 2>/dev/null # stopping lnd / bitcoin echo "--> stopping services ..." @@ -394,7 +394,7 @@ fi if [ "$1" = "import" ]; then # check second parameter for path and/or filename of import - importFile="${defaultZipPath}/raspiblitz-*.tar.gz" + importFile="${defaultUploadPath}/raspiblitz-*.tar.gz" if [ ${#2} -gt 0 ]; then # check if and/or filename of import containsPath=$(echo $2 | grep -c '/') @@ -421,7 +421,7 @@ if [ "$1" = "import" ]; then else # is just filename - to use with default path echo "# using file from parameter for import" - importFile="${defaultZipPath}/${2}" + importFile="${defaultUploadPath}/${2}" fi fi @@ -574,8 +574,8 @@ if [ "$1" = "import-gui" ]; then sudo /home/admin/config.scripts/blitz.datadrive.sh link # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} + sudo mkdir -p ${defaultUploadPath} + sudo chmod 777 -R ${defaultUploadPath} clear echo @@ -588,18 +588,18 @@ if [ "$1" = "import-gui" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." read key - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') # in case no upload found if [ ${countZips} -eq 0 ]; then echo - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" echo "error='no file found'" sleep 3 exit 1 @@ -608,7 +608,7 @@ if [ "$1" = "import-gui" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then echo - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" echo "error='multiple files'" sleep 3 exit 1 @@ -616,7 +616,7 @@ if [ "$1" = "import-gui" ]; then # restore upload echo - echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" + echo "OK: Upload found in ${defaultUploadPath} - restoring data ... (please wait)" source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") if [ ${#error} -gt 0 ]; then echo diff --git a/home.admin/config.scripts/lnd.rescue.sh b/home.admin/config.scripts/lnd.rescue.sh index 772131fd3..e10309702 100755 --- a/home.admin/config.scripts/lnd.rescue.sh +++ b/home.admin/config.scripts/lnd.rescue.sh @@ -5,6 +5,8 @@ source /mnt/hdd/raspiblitz.conf # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# small rescue script to to backup or restore LND data" + echo "# -> basic status:" + echo "# lnd.rescue.sh status" echo "# -> backup all LND data in a tar.gz file for download:" echo "# lnd.rescue.sh backup [?no-download]" echo "# -> upload a LND data tar.gz file to replace LND data:" @@ -16,10 +18,20 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then exit 1 fi -localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +# get local ip +source <(/home/admin/config.scripts/internet.sh status local) + +defaultUploadDir="/home/admin" mode="$1" -if [ ${mode} = "backup" ]; then + +if [ ${mode} = "status" ]; then + + echo "localip='${localip}'" + echo "defaultUploadDir='${defaultUploadDir}'" + exit 0 + +elif [ ${mode} = "backup" ]; then ################################ # BACKUP From 9166c5b54883ff9bbcb3d7fd3cdc6cb36d3e78f8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 20:14:48 +0200 Subject: [PATCH 047/293] introduce a upload prepare & check script --- home.admin/config.scripts/blitz.upload.sh | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 home.admin/config.scripts/blitz.upload.sh diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh new file mode 100644 index 000000000..7e532355a --- /dev/null +++ b/home.admin/config.scripts/blitz.upload.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# use to prepare & check scp or web file upload to RaspiBlitz" + echo "# blitz.upload.sh prepare-upload" + echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue]" + exit 0 +fi + +# get local ip +source <(/home/admin/config.scripts/internet.sh status local) + +# set upload path +if [ -d "/mnt/hdd/temp" ]; then + # HDD with temp directory is connected - the use it + defaultUploadPath="/mnt/hdd/temp/upload" +else + # fallback if no HDD is connected + defaultUploadPath="/home/bitcoin/temp/upload" +fi + + +# 1st PRAMETER action +action="$1" + +if [ ${action} = "prepare-upload" ]; then + + # make sure that temp directory exists, is clear and can be written by user bitcoin + sudo mkdir -p ${defaultUploadPath} 2>/dev/null + sudo rm ${defaultUploadPath}/* 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + + echo "localip='${localip}'" + echo "defaultUploadPath='${defaultUploadPath}'" + exit 0 +fi + +if [ ${action} = "check-upload" ]; then + + # 2nd PARAMETER is type of upload (optional) + type=$2 + echo "type='${type}'" + + # check if there to less or to many files in upload directory + countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) + if [ ${countFiles} -lt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='not-found'" + exit 1 + fi + if [ ${countFiles} -gt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='multiple'" + exit 1 + fi + + # get the file uploaded (full path) + filename=$(sudo ls ${defaultUploadPath}/*.*) + echo "# filename(${filename})" + + # check of size >0 + byteSize=$(ls -l ${filename} | awk '{print $5}') + echo "# byteSize(${byteSize})" + if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='invalid byte size: ${byteSize}'" + exit 1 + fi + + # SCB check if file looks valid + if [ "${type}" == "scb" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not *.backup'" + exit 1 + fi + + fi + + # LND-RESCUE check if file looks valid + if [ "${type}" == "lnd-rescue" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not lnd-rescue-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + + fi + + # ok looks good - return filename + echo "filename=${filename}" + exit 0 +fi + +echo "error='unkown parameter'" +exit 1 \ No newline at end of file From 30b1cf804f51a59abe694f8940f8f8557070987c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 20:17:48 +0200 Subject: [PATCH 048/293] blitz upload flexible user --- home.admin/config.scripts/blitz.upload.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 7e532355a..79326a23d 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -15,9 +15,11 @@ source <(/home/admin/config.scripts/internet.sh status local) if [ -d "/mnt/hdd/temp" ]; then # HDD with temp directory is connected - the use it defaultUploadPath="/mnt/hdd/temp/upload" + defaultUploadUser="bitcoin" else # fallback if no HDD is connected defaultUploadPath="/home/bitcoin/temp/upload" + defaultUploadUser="bitcoin" fi @@ -26,13 +28,14 @@ action="$1" if [ ${action} = "prepare-upload" ]; then - # make sure that temp directory exists, is clear and can be written by user bitcoin + # make sure that temp directory exists, is clear and can be written by ${defaultUploadUser} sudo mkdir -p ${defaultUploadPath} 2>/dev/null sudo rm ${defaultUploadPath}/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + sudo chown -R ${defaultUploadUser}:${defaultUploadUser} ${defaultUploadPath} 2>/dev/null echo "localip='${localip}'" echo "defaultUploadPath='${defaultUploadPath}'" + echo "defaultUploadUser='${defaultUploadUser}'" exit 0 fi From fcc1dae6baf38fc4ef0465486b12d6f00f8e9156 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:50:00 +0200 Subject: [PATCH 049/293] seperate gui & process lnd backup --- FAQ.md | 4 +- home.admin/00migrationDialog.sh | 16 +- home.admin/00provisionDialog.sh | 71 +-- home.admin/00raspiblitz.sh | 1 - home.admin/98repairBlockchain.sh | 2 +- home.admin/98repairMenu.sh | 6 +- home.admin/99updateMenu.sh | 4 +- home.admin/config.scripts/blitz.upload.sh | 3 +- home.admin/config.scripts/lnd.backup.sh | 547 ++++++++++++++++++++++ home.admin/config.scripts/lnd.rescue.sh | 292 ------------ 10 files changed, 609 insertions(+), 337 deletions(-) create mode 100755 home.admin/config.scripts/lnd.backup.sh delete mode 100755 home.admin/config.scripts/lnd.rescue.sh diff --git a/FAQ.md b/FAQ.md index 26e8f5407..ada220703 100644 --- a/FAQ.md +++ b/FAQ.md @@ -234,7 +234,7 @@ If you still can SSH in and HDD is readable, we can try to rescue/export your LN To rescue/export your Lightning data from a RaspiBlitz (since v1.1): * SSH into your RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh backup` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-export-gui` * follow the instructions of the script. This will create a lnd-rescue file (ends on gz.tar) that contains all the data from the LND. The script offers you a command to transfer the lnd-rescue file to your laptop. If the transfer was successful you can now setup a fresh RaspiBlitz. Do all the setup until you have a clean new Lightning node running - just without any funding or channels. @@ -242,7 +242,7 @@ This will create a lnd-rescue file (ends on gz.tar) that contains all the data f Then to restore your old LND data and to recover your funds and channels: * SSH into your new RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh restore` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-import-gui` * follow the instructions of the script. This script will offer you a way to transfer the lnd-rescue file from your laptop to the new RaspiBlitz and will restore the old data. LND then gets restarted for you, and after some time it should show you the status screen again with your old funds and channels. diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index c21ae83eb..0656b965d 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -47,13 +47,13 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "migrationOS='${migrationOS}'" >> $SETUPFILE echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - # get defaultZipPath, localIP, etc + # get defaultUploadPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) # make sure that temp directory exists, is clear and can be written by user bitcoin - sudo mkdir -p ${defaultZipPath} 2>/dev/null + sudo mkdir -p ${defaultUploadPath} 2>/dev/null sudo rm /mnt/hdd/temp/migration/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultZipPath} 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null # scp upload info clear @@ -67,17 +67,17 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." read key - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') # in case no upload found if [ ${countZips} -eq 0 ]; then - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE @@ -86,7 +86,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE @@ -95,7 +95,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${defaultZipPath}'" >> $SETUPFILE + echo "migrationFile='${defaultUploadPath}'" >> $SETUPFILE sleep 4 # user needs to reset password A diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index f172444ba..259377168 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -113,37 +113,56 @@ if [ "${CHOICE}" == "NEW" ]; then elif [ "${CHOICE}" == "OLD" ]; then - # get more details what kind of old lightning wallet user has - OPTIONS=() - OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") - OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") - OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + CHOICE="" + while [ "${CHOICESUB}" == "" ] + do - if [ "${CHOICE}" == "LNDRESCUE" ]; then + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - # just activate LND rescue upload - uploadLNDRESCUE=1 + if [ "${CHOICESUB}" == "LNDRESCUE" ]; then - # dont set password c anymore later on - setPasswordC=0 + # just activate LND rescue upload + uploadLNDRESCUE=1 - elif [ "${CHOICE}" == "SEED+SCB" ]; then + # dont set password c anymore later on + setPasswordC=0 - # activate SEED input & SCB upload - enterSEED=1 - uploadSCB=1 + elif [ "${CHOICESUB}" == "SEED+SCB" ]; then - elif [ "${CHOICE}" == "ONLYSEED" ]; then + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 - # activate SEED input & SCB upload - enterSEED=1 + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then - else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi + # let people know about the difference between SEED & SEED+SCB + whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " +Using JUST SEED WORDS will only recover your on-chain funds. +To also try to recover the open channel funds you need the +channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) +or having a complete LND rescue-backup from your old node. + " 11 65 + + if [ $? -eq 1 ]; then + # when user wants to go back + CHOICESUB="" + else + # activate SEED input & SCB upload + enterSEED=1 + fi + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + + done else echo "# you selected cancel - exited to terminal" @@ -153,11 +172,10 @@ fi # UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) if [ ${uploadLNDRESCUE} -eq 1 ]; then - echo "TODO: UPLOAD LND RESCUE FILE" + /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $SETUPFILE exit 1 fi - # INPUT LIGHTNING SEED dialog (if activated by dialogs above) if [ ${enterSEED} -eq 1 ]; then echo "TODO: INPUT LIGHTNING SEED" @@ -166,8 +184,7 @@ fi # UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) if [ ${uploadSCB} -eq 1 ]; then - echo "TODO: UPLOAD STATIC CHANNEL BACKUP FILE" - exit 1 + /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $SETUPFILE fi ################### diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 593e66601..07820d19d 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -454,7 +454,6 @@ case $CHOICE in if [ "$?" = "1" ]; then echo echo "# clean and unmount for next try" - sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null sudo umount /mnt/hdd 2>/dev/null sudo umount /mnt/storage 2>/dev/null sudo umount /mnt/temp 2>/dev/null diff --git a/home.admin/98repairBlockchain.sh b/home.admin/98repairBlockchain.sh index e31dcad59..17116c7c8 100755 --- a/home.admin/98repairBlockchain.sh +++ b/home.admin/98repairBlockchain.sh @@ -33,7 +33,7 @@ elif [ "${CHOICE}" = "REINDEX" ]; then sudo /home/admin/config.scripts/network.reindex.sh elif [ "${CHOICE}" = "BACKUP" ]; then - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo "PRESS ENTER to continue." read key diff --git a/home.admin/98repairMenu.sh b/home.admin/98repairMenu.sh index 4a9c45ee3..3b5bdb1a1 100755 --- a/home.admin/98repairMenu.sh +++ b/home.admin/98repairMenu.sh @@ -20,7 +20,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "PRESS ENTER to continue once you are done downloading." read key @@ -31,7 +31,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + /home/admin/config.scripts/lnd.backup.sh lnd-export fi } @@ -189,7 +189,7 @@ case $CHOICE in read key ;; BACKUP-LND) - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "Press ENTER when your backup download is done to shutdown." read key diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index 0d76ecdd7..ae7bff304 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -38,7 +38,7 @@ Do you want to download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "PRESS ENTER to continue once you're done downloading." read key @@ -49,7 +49,7 @@ Do you want to download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + /home/admin/config.scripts/lnd.backup.sh lnd-export fi whiptail --title "READY TO UPDATE?" --yes-button "START UPDATE" --no-button "Cancel" --yesno "If you start the update: The RaspiBlitz will power down. diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 79326a23d..e366f7e6f 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -111,8 +111,9 @@ if [ ${action} = "check-upload" ]; then fi - # ok looks good - return filename + # ok looks good - return filename & more info echo "filename=${filename}" + echo "bytesize=${byteSize}" exit 0 fi diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh new file mode 100755 index 000000000..ee97df73d --- /dev/null +++ b/home.admin/config.scripts/lnd.backup.sh @@ -0,0 +1,547 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# ---------------------------------------------------" + echo "# LND RESCUE FILE (tar.gz of complete lnd directory)" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh lnd-export" + echo "# lnd.backup.sh lnd-export-gui" + echo "# lnd.backup.sh lnd-import [file]" + echo "# lnd.backup.sh lnd-import-gui [setup|production]" + echo "# ---------------------------------------------------" + echo "# STATIC CHANNEL BACKUP" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh scb-export" + echo "# lnd.backup.sh scb-export-gui" + echo "# lnd.backup.sh scb-import [file]" + echo "# lnd.backup.sh scb-import-gui [setup|production]" + echo "# ---------------------------------------------------" + echo "# SEED WORDS" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh seed-export-gui [lndseeddata]" + echo "# lnd.backup.sh seed-import-gui" + exit 1 +fi + +# 1st PRAMETER action +mode="$1" + +################################ +# LND RESCUE FILE - EXPORT +################################ + +if [ ${mode} = "lnd-export" ]; then + + echo "# *** LND.RESCUE --> BACKUP" + downloadPath="/home/admin" + fileowner="admin" + + # stop LND + echo "# Stopping lnd..." + sudo systemctl stop lnd + sleep 5 + echo "# OK" + echo + + # add lnd version info into lnd dir (to detect needed updates later) + lndVersion=$(sudo -u bitcoin lncli getinfo | jq -r ".version" | cut -d ' ' -f1) + sudo rm /mnt/hdd/lnd/version.info 2>/dev/null + echo "${lndVersion}" > /home/admin/lnd.version.info + sudo mv /home/admin/lnd.version.info /mnt/hdd/lnd/version.info + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/version.info + + # zip it + sudo tar -zcvf ${downloadPath}/lnd-rescue.tar.gz /mnt/hdd/lnd 1>&2 + sudo chown ${fileowner}:${fileowner} ${downloadPath}/lnd-rescue.tar.gz 1>&2 + + # delete old backups + rm ${downloadPath}/lnd-rescue-*.tar.gz 2>/dev/null 1>/dev/null + + # name with md5 checksum + md5checksum=$(md5sum ${downloadPath}/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1) + mv ${downloadPath}/lnd-rescue.tar.gz ${downloadPath}/lnd-rescue-${md5checksum}.tar.gz 1>&2 + byteSize=$(ls -l ${downloadPath}/lnd-rescue-${md5checksum}.tar.gz | awk '{print $5}') + + # check file size + if [ ${byteSize} -lt 100 ]; then + echo "error='backup is empty'" + exit 1 + fi + + # output result data + echo "# lnd service is stopped for security" + echo "filename='${downloadPath}/lnd-rescue-${md5checksum}.tar.gz'" + echo "fileowner='${fileowner}'" + echo "size=${byteSize}" + exit 0 +fi + +if [ ${mode} = "lnd-export-gui" ]; then + + # create lnd rescue file + source <(/home/admin/config.scripts/lnd.backup.sh lnd-export) + if [ "${error}" != "" ]; then + echo "error='${error}'" + exit 1 + fi + + # get local ip info + source <(/home/admin/config.scripts/internet.sh status local) + + # offer SCP for download + clear + echo + echo "****************************" + echo "* DOWNLOAD THE RESCUE FILE *" + echo "****************************" + echo + echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" + echo "scp '${fileowner}@${localip}:${filename}' ./" + echo "ON WINDOWS USE:" + echo "scp ${fileowner}@${localip}:${filename} ." + echo "" + echo "Use password A to authenticate file transfer." + echo "Check for correct file size after transfer: ${byteSize} byte" + echo + echo "BEWARE: Your Lightning node is now stopped. It's safe to backup the data and" + echo "restore it on a fresh RaspiBlitz. But once this Lightning node gets started" + echo "again or rebooted, it's not advised to restore the backup file because" + echo "it would contain outdated channel data and can lead to loss of channel funds." + exit 0 +fi + +################################ +# LND RESCUE FILE - IMPORT +################################ + +if [ ${mode} = "lnd-import" ]; then + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + filename=$2 + if [ "${filename}" == "" ]; then + echo "error='filename missing'" + exit 1 + fi + fileExists=$(sudo ls ${filename} 2>/dev/null | grep -c "${filename}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" + exit 1 + fi + + # stop LND + echo "# stopping lnd..." + sudo systemctl stop lnd 1>/dev/null + sleep 5 + + # clean DIR + echo "# cleaning old LND data ..." + sudo rm -r /mnt/hdd/lnd/* 1>/dev/null 2>/dev/null + + # unpack zip + echo "# restoring LND data from ${filename} ..." + sudo tar -xf ${filename} -C / 1>/dev/null + sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd 1>/dev/null + + # lnd version of LND rescue file (thats packed as extra info in the file) + # its included since RaspiBlitz v1.7.1 /mnt/hdd/lnd/version.info + # this can happen if someone uses the manual LND update and then uploads to an old default LND + # if so just signal this in the output + + echo "# DONE - lnd service is still stopped - start manually with command:" + echo "# sudo systemctl start lnd" + exit 0 + +fi + +if [ ${mode} = "lnd-import-gui" ]; then + + # get by second parameter if this call if happening during setup or production + scenario=$2 + if [ "${scenario}" != "setup" ] && [ "${scenario}" != "production" ]; then + echo "error='mising parameter'" + exit 1 + fi + + # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + if [ "${scenario}" == "setup" ]; then + SETUPFILE=$3 + if [ "${SETUPFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + fi + + # determine password info based on scenario + if [ "${scenario}" == "setup" ]; then + passwordInfo="password 'raspiblitz'" + else + passwordInfo="your Password A" + fi + + # get defaultUploadPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) + + filename="" + while [ "${filename}" == "" ] + do + clear + echo "**************************" + echo "* UPLOAD THE RESCUE FILE *" + echo "**************************" + echo "If you have a lnd-rescue backup file on your laptop you can now" + echo "upload it and restore the your latest LND state." + echo + echo "CAUTION: Dont restore old LND states - risk of loosing funds!" + echo + echo "To make upload open a new terminal on your laptop," + echo "change into the directory where your lnd-rescue file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./lnd-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use ${passwordInfo} to authenticate file transfer." + echo "PRESS ENTER when upload is done" + read key + + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload lnd-rescue) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done + + # in setup scenario the final import is happening during provison + if [ "${scenario}" == "setup" ]; then + # just add lndrescue filename to give file + echo "lndrescue='${filename}'" >> $SETUPFILE + echo "" + exit 0 + fi + + # in production now start restoring LND data based on file + source /mnt/hdd/raspiblitz.conf + + # ask security question before deleting old wallet + echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz." + echo + echo "Write the word 'override' and press ENTER to CONTINUE:" + read securityInput + if [ "${securityInput}" != "override" ] && [ "${securityInput}" != "'override'" ]; then + echo + echo "CANCELED import of uploaded rescue file" + exit 1 + fi + echo + + # run import process + echo "OK deleting old LND data & restoring imported rescue file ..." + source <(sudo /home/admin/config.scripts/lnd.backup.sh lnd-import ${filename}) + + # TODO: check if update of LND is needed (see detailes in lnd-import) for edge case + + # turn off auto-unlock if activated because password c might now change + if [ "${autoUnlock}" == "on" ]; then + /home/admin/config.scripts/lnd.autounlock.sh off + fi + + # restarting lnd & give final info + sudo systemctl start lnd + echo "DONE - lnd is now restarting .. Password C is now like within your rescue file" + echo "Check that LND is starting up correctly and your old channel & funds are restored." + echo "Take into account that some channels might have been force closed in the meanwhile." + exit 0 +fi + +#################################### +# STATIC CHANEL BACKUP FILE - EXPORT +#################################### + +if [ ${mode} = "scb-export" ]; then + + # get file info + source /mnt/hdd/raspiblitz.conf + echo "filename='/mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup'" + echo "fileuser='bitcoin'" + + # localip + source <(/home/admin/config.scripts/internet.sh status local) + echo "localip='${localip}'" + + exit 0 +fi + +if [ ${mode} = "scb-export-gui" ]; then + + # get the scb info + source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-export) + + # show download info + clear + echo "**************************************" + echo "* DOWNLOAD STATIC CHANEL BACKUP FILE *" + echo "**************************************" + echo + echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:" + echo "scp -r ${fileuser}@${localip}:${filename} ./" + echo "" + echo "Use password A to authenticate file transfer." + echo + echo "NOTE: Use this file when setting up a fresh RaspiBlitz by choosing" + echo "option OLD WALLET and then SCB+SEED -> Seed & channel.backup file" + echo "Will just recover on-chain & channel-funds, but closing all channels" + exit 0 +fi + +#################################### +# STATIC CHANEL BACKUP FILE - IMPORT +#################################### + +if [ ${mode} = "scb-import" ]; then + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + filename=$2 + if [ "${filename}" == "" ]; then + echo "error='filename missing'" + exit 1 + fi + fileExists=$(sudo ls ${filename} 2>/dev/null | grep -c "${filename}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" + exit 1 + fi + + # place the the file at '/home/admin/channel.backup' + sudo mv ${filename} /home/admin/channel.backup + sudo chmod 777 /home/admin/channel.backup + sudo chown admin:admin /home/admin/channel.backup + echo "# OK - placed SCB file at /home/admin/channel.backup" + +fi + +if [ ${mode} = "scb-import-gui" ]; then + + # get by second parameter if this call if happening during setup or production + scenario=$2 + if [ "${scenario}" != "setup" ] && [ "${scenario}" != "production" ]; then + echo "error='mising parameter'" + exit 1 + fi + + # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + if [ "${scenario}" == "setup" ]; then + SETUPFILE=$3 + if [ "${SETUPFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + fi + + # determine password info based on scenario + if [ "${scenario}" == "setup" ]; then + passwordInfo="password 'raspiblitz'" + else + passwordInfo="your Password A" + fi + + # get defaultUploadPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) + + filename="" + while [ "${filename}" == "" ] + do + + clear + echo "**********************************" + echo "* UPLOAD THE channel.backup FILE *" + echo "**********************************" + echo + echo "If you have the channel.backup file on your laptop or on" + echo "another server you can now upload it to the RaspiBlitz." + echo + echo "To make upload open a new terminal and change," + echo "into the directory where your lnd-rescue file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp ./*.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use ${passwordInfo} to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload scb) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done + + # in setup scenario the final import is happening during provison + if [ "${scenario}" == "setup" ]; then + # just add staticchannelbackup filename to give file + echo "staticchannelbackup='${filename}'" >> $SETUPFILE + echo "" + exit 0 + fi + + # run import process + echo "OK importing channel.backup file ..." + source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import ${filename}) + + # give final info + echo "DONE - placed SCB file at /home/admin/channel.backup" + echo "Reboot and login to trigger import." + exit 0 +fi + +#################################### +# SEED WORDS - GUI PARTS +#################################### + + echo "# lnd.backup.sh seed-export-gui [seedwords6x4]" + echo "# lnd.backup.sh seed-import-gui [resultfile]" + +if [ ${mode} = "seed-export-gui" ]; then + + # 2nd PARAMETER: lnd seed data + seedwords=$2 + if [ "${seedwords}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + + ack=0 + while [ ${ack} -eq 0 ] + do + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76 + whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 + if [ $? -eq 1 ]; then + ack=1 + fi + done + +fi + +# Results will be stored on memory cache: +# /var/cache/raspiblitz/seed-import.results +if [ ${mode} = "seed-import-gui" ]; then + + # prepare seed result file + sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null + sudo touch /var/cache/raspiblitz/seed-import.results + sudo chown admin:admin /var/cache/raspiblitz/seed-import.results + + # input loop for seed words + wordsCorrect=0 + while [ ${wordsCorrect} -eq 0 ] + do + + # prepare temp file + sudo rm /var/cache/raspiblitz/.seed.tmp 2>/dev/null + sudo touch /var/cache/raspiblitz/.seed.tmp + sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp + + # dialog to enter + dialog --backtitle "RaspiBlitz - LND Recover" --inputbox "Please enter/paste the SEED WORD LIST:\n(just the words, seperated by spaces, in correct order as numbered)" 9 78 2>/var/cache/raspiblitz/.seed.tmp + wordstring=$(cat /var/cache/raspiblitz/.seed.tmp | sed 's/[^a-zA-Z0-9 ]//g') + sudo shred -u /var/cache/raspiblitz/.seed.tmp 2>/dev/null + echo "processing ..." + + # check correct number of words + wordcount=$(echo "${wordstring}" | wc -w) + if [ ${wordcount} -eq 24 ]; then + echo "OK - 24 words" + wordsCorrect=1 + else + whiptail --title " WARNING " \ + --yes-button "Try Again" \ + --no-button "Cancel" \ + --yesno " +The word list has ${wordcount} words. But it must be 24. +Please check your list and try again. + +Best is to write words in external editor +and then copy and paste them into dialog. + +The Word list should look like this: +wordone wordtweo wordthree ... + +" 16 52 + + if [ $? -eq 1 ]; then + # result file is empty on cancel + exit 1 + fi + fi + done + + # ask if seed was protected by password D + passwordD="" + dialog --title "SEED PASSWORD" --yes-button "No extra Password" --no-button "Yes" --yesno " +Are your seed words protected by an extra password? + +During wallet creation LND offers to set an extra password +to protect the seed words. Most users did not set this. + " 11 65 + if [ $? -eq 1 ]; then + sudo rm /var/cache/raspiblitz/.pass.tmp 2>/dev/null + sudo touch /var/cache/raspiblitz/.pass.tmp + sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp + sudo /home/admin/config.scripts/blitz.setpassword.sh x "Enter extra Password D" /var/cache/raspiblitz/.pass.tmp empty-allowed + passwordD=$(sudo cat /var/cache/raspiblitz/.pass.tmp) + sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null + fi + + # writing result file data + clear + echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" + echo "seedwords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results + echo "password='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + exit 0 + +fi + +echo "error='unknown parameter'" +exit 1 diff --git a/home.admin/config.scripts/lnd.rescue.sh b/home.admin/config.scripts/lnd.rescue.sh deleted file mode 100755 index e10309702..000000000 --- a/home.admin/config.scripts/lnd.rescue.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/bin/bash - -source /mnt/hdd/raspiblitz.conf - -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# small rescue script to to backup or restore LND data" - echo "# -> basic status:" - echo "# lnd.rescue.sh status" - echo "# -> backup all LND data in a tar.gz file for download:" - echo "# lnd.rescue.sh backup [?no-download]" - echo "# -> upload a LND data tar.gz file to replace LND data:" - echo "# lnd.rescue.sh restore" - echo "# -> download the LND channel.backup file from SD card:" - echo "# lnd.rescue.sh scb-down" - echo "# -> upload the LND channel.backup to recover wallet:" - echo "# lnd.rescue.sh scb-up" - exit 1 -fi - -# get local ip -source <(/home/admin/config.scripts/internet.sh status local) - -defaultUploadDir="/home/admin" - -mode="$1" - -if [ ${mode} = "status" ]; then - - echo "localip='${localip}'" - echo "defaultUploadDir='${defaultUploadDir}'" - exit 0 - -elif [ ${mode} = "backup" ]; then - - ################################ - # BACKUP - ################################ - - echo "# *** LND.RESCUE --> BACKUP" - - # stop LND - echo "# Stopping lnd..." - sudo systemctl stop lnd - sleep 5 - echo "# OK" - echo - - # zip it - sudo tar -zcvf /home/admin/lnd-rescue.tar.gz /mnt/hdd/lnd 1>&2 - sudo chown admin:admin /home/admin/lnd-rescue.tar.gz 1>&2 - - # delete old backups - rm /home/admin/lnd-rescue-*.tar.gz 2>/dev/null 1>/dev/null - - # name with md5 checksum - md5checksum=$(md5sum /home/admin/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1) - mv /home/admin/lnd-rescue.tar.gz /home/admin/lnd-rescue-${md5checksum}.tar.gz 1>&2 - echo "file='lnd-rescue-${md5checksum}.tar.gz'" - echo "path='/home/admin/'" - - byteSize=$(ls -l /home/admin/lnd-rescue-${md5checksum}.tar.gz | awk '{print $5}') - echo "size=${byteSize}" - - if [ ${byteSize} -lt 100 ]; then - echo "error='backup is empty'" - echo - echo "# *****************************" - echo "# * BACKUP ERROR *" - echo "# *****************************" - echo "# The byte size of the created rescue-file is too small (${byteSize}) - might be empty!" - echo "# If you plan any update or recovery please stop and report this error to dev team. Thx." - exit 0 - fi - - # stop here in case of 'no-download' option - if [ "${2}" == "no-download" ]; then - echo "# No download of LND data requested." - exit 0 - fi - - # offer SCP for download - clear - echo - echo "****************************" - echo "* DOWNLOAD THE RESCUE FILE *" - echo "****************************" - echo - echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" - echo "scp -r 'admin@${localip}:/home/admin/lnd-rescue-*.tar.gz' ./" - echo "ON WINDOWS USE:" - echo "scp -r admin@${localip}:/home/admin/lnd-rescue-*.tar.gz ." - echo "" - echo "Use password A to authenticate file transfer." - echo "Check for correct file size after transfer: ${byteSize} byte" - echo - echo "BEWARE: Your Lightning node is now stopped. It's safe to backup the data and" - echo "restore it on a fresh RaspiBlitz. But once this Lightning node gets started" - echo "again or rebooted, it's not advised to restore the backup file because" - echo "it would contain outdated channel data and can lead to loss of channel funds." - -elif [ ${mode} = "restore" ]; then - - ################################ - # RESTORE - ################################ - - echo "# LND.RESCUE --> RESTORE" - echo "" - - # delete old backups - rm /home/admin/lnd-rescue-*.tar.gz - - filename="" - while [ ${#filename} -eq 0 ] - do - countZips=$(sudo ls /home/admin/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') - if [ ${countZips} -lt 1 ]; then - echo "**************************" - echo "* UPLOAD THE RESCUE FILE *" - echo "**************************" - echo "If you have a lnd-rescue backup file on your laptop you can now" - echo "upload it and restore the your latest LND state." - echo - echo "CAUTION: Dont restore old LND states - risk of loosing funds!" - echo - echo "To make upload open a new terminal on your laptop," - echo "change into the directory where your lnd-rescue file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./lnd-rescue-*.tar.gz admin@${localip}:/home/admin/" - echo "" - echo "Use password A to authenticate file transfer." - echo "PRESS ENTER when upload is done." - fi - if [ ${countZips} -gt 1 ]; then - echo "!! WARNING !!" - echo "There are multiple lnd-rescue files in directory /home/admin." - echo "Make sure you upload only one tar.gz-file and start again." - echo - echo "PRESS ENTER to continue." - read key - exit 1 - fi - if [ ${countZips} -eq 1 ]; then - - clear - echo - echo "**************************" - echo "* RESTORING BACKUP FILE *" - echo "**************************" - echo - - filename=$(sudo ls /home/admin/lnd-rescue-*.tar.gz) - echo "OK -> found file to restore: ${filename}" - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ ${isCorrect} -eq 1 ]; then - echo "OK -> checksum looks good: ${md5checksum}" - else - echo "!!! FAIL -> Checksum not correct." - echo "Maybe transfer failed? Continue at your own risk!" - echo "It is recommended to abort and upload again!" - fi - - # overrride test - oldWalletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep -c "wallet.db") - if [ ${oldWalletExists} -gt 0 ]; then - echo - echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz." - fi - echo - echo "PRESS ENTER to start restore. Enter x & ENTER to cancel." - fi - read key - if [ "${key}" == "x" ]; then - exit 1 - fi - done - - # stop LND - echo "Stopping lnd..." - sudo systemctl stop lnd - sleep 5 - echo "OK" - echo - - # clean DIR - echo "Cleaning LND data ..." - sudo rm -r /mnt/hdd/lnd/* - echo "OK" - echo - - # unpack zip - echo "Restoring LND data from ${filename} ..." - sudo tar -xf ${filename} -C / - sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd - echo "OK" - echo - - # check if LND needs update - # (if RaspiBlitz has an optional LND version update, then install it - # the newer LND version can always handle older data) - echo "Checking LND version ..." - source <(sudo -u admin /home/admin/config.scripts/lnd.update.sh info) - if [ ${lndUpdateInstalled} -eq 0 ]; then - echo "Installing available LND update ... (newer version can handle more wallet formats)" - sudo -u admin /home/admin/config.scripts/lnd.update.sh verified - else - echo "OK" - fi - echo - - # start LND - echo "Starting lnd..." - sudo systemctl start lnd - echo "OK" - echo - - echo "DONE - please check if LND starts up correctly with restored state and funds." - echo "Keep in mind that some channels maybe forced closed in the meanwhile." - echo - -elif [ ${mode} = "scb-down" ]; then - - echo - echo "****************************" - echo "* DOWNLOAD THE BACKUP FILE *" - echo "****************************" - echo - echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:" - echo "scp -r admin@${localip}:/home/admin/.lnd/data/chain/${network}/${chain}net/channel.backup ./" - echo "" - echo "Use password A to authenticate file transfer." - echo - echo "NOTE: Use this file when setting up a fresh RaspiBlitz by choosing" - echo "option OLD WALLET and then SCB+SEED -> Seed & channel.backup file" - echo "Will just recover on-chain & channel-funds, but closing all channels" - -elif [ ${mode} = "scb-up" ]; then - - gotFile=-1 - while [ ${gotFile} -lt 1 ] - do - - # show info - clear - sleep 1 - echo "**********************************" - echo "* UPLOAD THE channel.backup FILE *" - echo "**********************************" - echo - if [ ${gotFile} -eq -1 ]; then - echo "If you have the channel.backup file on your laptop or on" - echo "another server you can now upload it to the RaspiBlitz." - elif [ ${gotFile} -eq 0 ]; then - echo "NO channel.backup FOUND IN /home/admin" - echo "Please try upload again." - fi - echo - echo "To make upload open a new terminal and change," - echo "into the directory where your lnd-rescue file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp ./channel.backup admin@${localip}:/home/admin/" - echo "" - echo "Use password A to authenticate file transfer." - echo "PRESS ENTER when upload is done. Enter x & ENTER to cancel." - - # wait user interaction - echo "Please upload file. Press ENTER to try again or (x & ENTER) to cancel." - read key - if [ "${key}" == "x" ]; then - # EXIT with CODE 1 --> USER CANCEL - echo "# CANCEL upload" - exit 1 - fi - - # test upload - gotFile=$(ls /home/admin/channel.backup | grep -c 'channel.backup') - - done - - # EXIT with CODE 1 --> FILE UPLOADED - echo - echo "# OK channel.backup uploaded" - sleep 2 - exit 0 - -else - echo "unknown parameter '${mode}' - exit" -fi From 9221302abbc0bc263d24633481d28320746210ee Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:54:10 +0200 Subject: [PATCH 050/293] empty results on cancel --- home.admin/config.scripts/lnd.backup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index ee97df73d..d3298971a 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -511,7 +511,8 @@ wordone wordtweo wordthree ... " 16 52 if [ $? -eq 1 ]; then - # result file is empty on cancel + echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" + clear exit 1 fi fi From a687480026f2d93a6c23b9fe069ba00aec98001e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:57:59 +0200 Subject: [PATCH 051/293] clear info --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index d3298971a..8ca8bae53 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -511,8 +511,8 @@ wordone wordtweo wordthree ... " 16 52 if [ $? -eq 1 ]; then - echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" clear + echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" exit 1 fi fi From dd2d69d9920199bd8e9692a236aa920aedcd5d92 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:21:34 +0200 Subject: [PATCH 052/293] harmonize seed input vars --- home.admin/00migrationDialog.sh | 1 + home.admin/00provisionDialog.sh | 13 +++++++++++-- home.admin/config.scripts/lnd.backup.sh | 17 ++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 0656b965d..f26816a16 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -1,5 +1,6 @@ #!/bin/bash +# TODO: use blitz.upload.sh for uploading the migration file # TODO: also the migration might need to be adapted to work with an already mounted HDD later # command info diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 259377168..4296c6ce3 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -178,8 +178,17 @@ fi # INPUT LIGHTNING SEED dialog (if activated by dialogs above) if [ ${enterSEED} -eq 1 ]; then - echo "TODO: INPUT LIGHTNING SEED" - exit 1 + /home/admin/config.scripts/lnd.backup.sh seed-import-gui + # load results from results file + source <(/var/cache/raspiblitz/seed-import.results) + # if user canceled the seed input + if [ "${seedWords}" == "" ]; then + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + echo "seedWords='${seedWords}'" >> $SETUPFILE + echo "seedPassword='${seedPassword}'" >> $SETUPFILE fi # UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 8ca8bae53..7dd32f2b6 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -440,14 +440,14 @@ fi # SEED WORDS - GUI PARTS #################################### - echo "# lnd.backup.sh seed-export-gui [seedwords6x4]" - echo "# lnd.backup.sh seed-import-gui [resultfile]" - if [ ${mode} = "seed-export-gui" ]; then + # use text snippet for testing: + # + # 2nd PARAMETER: lnd seed data - seedwords=$2 - if [ "${seedwords}" == "" ]; then + seedwords6x4=$2 + if [ "${seedwords6x4}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -468,6 +468,9 @@ fi # /var/cache/raspiblitz/seed-import.results if [ ${mode} = "seed-import-gui" ]; then + # fake seed 24 words for testing input: + # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das + # prepare seed result file sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null sudo touch /var/cache/raspiblitz/seed-import.results @@ -538,8 +541,8 @@ to protect the seed words. Most users did not set this. # writing result file data clear echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" - echo "seedwords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results - echo "password='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + echo "seedWords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results + echo "seedPassword='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results exit 0 fi From c4ca80072302a1f5e777ba985d7c7bfa1db7500e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:35:11 +0200 Subject: [PATCH 053/293] upload migration file --- home.admin/config.scripts/blitz.upload.sh | 25 ++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index e366f7e6f..8880c6ab6 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -4,7 +4,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# use to prepare & check scp or web file upload to RaspiBlitz" echo "# blitz.upload.sh prepare-upload" - echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue]" + echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue|migration]" exit 0 fi @@ -109,6 +109,29 @@ if [ ${action} = "check-upload" ]; then exit 1 fi + # MIGRATION check if file looks valid + if [ "${type}" == "migration" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not raspiblitz-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi # ok looks good - return filename & more info From d7813ff86f94c9b5d1e3d526192fb7bb7b9a2fb4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:35:28 +0200 Subject: [PATCH 054/293] upload migration file --- home.admin/00migrationDialog.sh | 90 ++++++++++++++++++--------------- home.admin/00provisionDialog.sh | 8 +-- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index f26816a16..e98958844 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -49,54 +49,60 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # get defaultUploadPath, localIP, etc - source <(sudo /home/admin/config.scripts/blitz.migration.sh status) + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) - # make sure that temp directory exists, is clear and can be written by user bitcoin - sudo mkdir -p ${defaultUploadPath} 2>/dev/null - sudo rm /mnt/hdd/temp/migration/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + filename="" + while [ "${filename}" == "" ] + do - # scp upload info - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key + clear + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key - countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" - echo "Shutting down ... please make a fresh sd card & try again." - sleep 3 - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" - echo "Shutting down ... please make a fresh sd card & try again." - sleep 3 - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload migration) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${defaultUploadPath}'" >> $SETUPFILE + echo "migrationFile='${filename}'" >> $SETUPFILE sleep 4 # user needs to reset password A diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 4296c6ce3..2bedc4b94 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -231,7 +231,7 @@ password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -echo "TODO: continue with further " -exit 1 - -clear \ No newline at end of file +clear +echo "# setup dialog done - results in:" +echo "# $CONFIGFILE" +echo "# $SETUPFILE" \ No newline at end of file From 12bd7fe981c3f2fdd843866214a175ee9226082d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 11:41:40 +0200 Subject: [PATCH 055/293] cleanup migration script --- home.admin/config.scripts/blitz.migration.sh | 279 ++----------------- 1 file changed, 26 insertions(+), 253 deletions(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 79f06024c..7ad3c8ad8 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -1,10 +1,8 @@ #!/bin/bash -# TODO: check if services/apps are running and stop all ... or let thet to outside? - if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# managing the RaspiBlitz data - import, export, backup." - echo "# blitz.migration.sh [status|export|import|export-gui|import-gui|migration-umbrel|migration-mynode]" + echo "# blitz.migration.sh [export|import|export-gui|migration-umbrel|migration-mynode]" echo "error='missing parameters'" exit 1 fi @@ -22,9 +20,6 @@ fi # check if data drive is mounted - other wise cannot operate isMounted=$(sudo df | grep -c /mnt/hdd) -# gathering system info -isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) - # set place where zipped TAR file gets stored defaultUploadPath="/mnt/hdd/temp/migration" @@ -40,7 +35,6 @@ scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPat # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" - echo "isBTRFS=${isBTRFS}" echo "localip=\"${localip}\"" echo "defaultUploadPath=\"${defaultUploadPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" @@ -353,7 +347,7 @@ if [ "$1" = "export-gui" ]; then # create new migration file clear echo "--> creating blitz migration file ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "export") + source <(sudo /home/admin/config.scripts/blitz.migration.sh export) if [ ${#filename} -eq 0 ]; then echo "# FAIL: was not able to create migration file" exit 0 @@ -393,71 +387,29 @@ fi if [ "$1" = "import" ]; then - # check second parameter for path and/or filename of import - importFile="${defaultUploadPath}/raspiblitz-*.tar.gz" - if [ ${#2} -gt 0 ]; then - # check if and/or filename of import - containsPath=$(echo $2 | grep -c '/') - if [ ${containsPath} -gt 0 ]; then - startsOnPath=$(echo $2 | grep -c '^/') - if [ ${startsOnPath} -eq 0 ]; then - echo "# needs to be an absolut path: ${2}" - echo "error='invalid path'" - exit 1 - else - if [ -d "$2" ]; then - echo "# using path from parameter to search for import" - endsOnPath=$(echo $2 | grep -c '/$') - if [ ${endsOnPath} -eq 1 ]; then - importFile="${2}raspiblitz-*.tar.gz" - else - importFile="${2}/raspiblitz-*.tar.gz" - fi - else - echo "# using path+file from parameter for import" - importFile=$2 - fi - fi - else - # is just filename - to use with default path - echo "# using file from parameter for import" - importFile="${defaultUploadPath}/${2}" - fi - fi - - # checking if file exists and unique - echo "# checking for file with: ${importFile}" - countZips=$(sudo ls ${importFile} 2>/dev/null | grep -c '.tar.gz') - if [ ${countZips} -eq 0 ]; then - echo "# can just find file when ends on .tar.gz and exists" - echo "scpUploadUnix=\"${scpUploadUnix}\"" - echo "scpUploadWin=\"${scpUploadWin}\"" - echo "error='file not found'" + # BACKGROUND: + # the migration import is only called during setup phase - assume a prepared but clean HDD + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + importFile=$2 + if [ "${importFile}" == "" ]; then + echo "error='filename missing'" exit 1 - elif [ ${countZips} -eq 1 ]; then - importFile=$(sudo ls ${importFile}) - else - echo "# Multiple files found. Not sure which to use." - echo "# Please use absolut-path+file as second parameter." - echo "error='file not unique'" + fi + fileExists=$(sudo ls ${importFile} 2>/dev/null | grep -c "${importFile}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" exit 1 fi echo "importFile='${importFile}'" - echo "# Validating Checksum (can take some time) .." - md5checksum=$(md5sum ${importFile} | head -n1 | cut -d " " -f1) - isCorrect=$(echo ${importFile} | grep -c ${md5checksum}) - if [ ${isCorrect} -eq 1 ]; then - echo "# OK -> checksum looks good: ${md5checksum}" - else - echo "# FAIL -> Checksum not correct: ${md5checksum}" - echo "# Maybe transfer/upload failed?" - echo "error='bad checksum'" - exit 1 - fi - echo "# Importing (overwrite) (can take some time) .." sudo tar -xf ${importFile} -C / + if [ "$?" != "0" ]; then + echo "error='non zero exit state of unzipping migration file'" + echo "# reboot system ... HDD will offer fresh formating" + exit 1 + fi # copy bitcoin/litecoin data backups back to orgplaces (if part of backup) if [ -d "/mnt/hdd/backup_bitcoin" ]; then @@ -477,197 +429,18 @@ if [ "$1" = "import" ]; then sudo chown bitcoin:bitcoin -R /mnt/storage/litecoin 2>/dev/null fi - echo "# OK done - you may now want to:" - echo "# make sure that HDD is not registered in /etc/fstab & reboot" - echo "# to kickstart recovering system based in imported data" - - exit 0 -fi - -if [ "$1" = "import-gui" ]; then - - # get info about HDD - echo "# Gathering HDD/SSD info ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - - # make sure HDD/SSD is not mounted - # because importing migration just works during early setup - if [ ${isMounted} -eq 1 ]; then - echo "FAIL --> cannot import migration data when HDD/SSD is mounted" + # check migration + raspiblitzConfExists=$(sudo ls /mnt/hdd/raspiblitz.conf | grep -c "raspiblitz.conf") + if [ "${raspiblitzConfExists}" != "1" ]; then + echo "error='no raspiblitz.conf after unzip migration file'" + echo "# reboot system ... HDD will offer fresh formating" exit 1 fi - # make sure a HDD/SSD is connected - if [ ${#hddCandidate} -eq 0 ]; then - echo "FAIL --> there is no HDD/SSD connected to migrate data to" - exit 1 - fi - - # check if HDD/SSD is big enough - if [ ${hddGigaBytes} -lt 120 ]; then - echo "FAIL --> connected HDD/SSD is too small" - exit 1 - fi - - # ask format for new HDD/SSD - OPTIONS=() - # check if HDD/SSD contains Bitcoin Blockchain - if [ "${hddBlocksBitcoin}" == "1" ]; then - OPTIONS+=(KEEP "Dont format & use Blockchain") - fi - OPTIONS+=(EXT4 "Ext4 & 1 Partition (default)") - OPTIONS+=(BTRFS "BTRFS & 3 Partitions (experimental)") - - useBlockchain=0 - hddFormat=None - CHOICE=$(whiptail --clear --title "Formatting ${hddCandidate}" --menu "" 10 52 3 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - EXT4) - hddFormat=ext4 - echo "EXT4 FORMAT -->" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ext4 ${hddPartitionCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - BTRFS) - hddFormat=btrfs - echo "BTRFS FORMAT" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format btrfs ${hddCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - KEEP) - echo "Keep HDD & Blockchain" - useBlockchain=1 - ;; - *) - echo "CANCEL" - exit 0 - ;; - esac - - if [ ${useBlockchain} -eq 1 ]; then - if [ ${isBTRFS} -eq 1 ]; then - hddFormat=btrfs - else - hddFormat=ext4 - fi - fi - - # now temp mount the HDD/SSD - if [ "$hddFormat" == "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) - else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) - fi - if [ ${#error} -gt 0 ]; then - echo "FAIL: Was not able to temp mount the HDD/SSD --> ${error}" - exit 1 - fi - - # make sure all directories betare propper linked - sudo /home/admin/config.scripts/blitz.datadrive.sh link - - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultUploadPath} - sudo chmod 777 -R ${defaultUploadPath} - - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key - - countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo - echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" - echo "error='no file found'" - sleep 3 - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo - echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" - echo "error='multiple files'" - sleep 3 - exit 1 - fi - - # restore upload - echo - echo "OK: Upload found in ${defaultUploadPath} - restoring data ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") - if [ ${#error} -gt 0 ]; then - echo - echo "# FAIL: Was not able to restore data" - echo "error='${error}'" - sleep 3 - exit 1 - fi - - # check & load config - source /mnt/hdd/raspiblitz.conf - if [ ${#network} -eq 0 ]; then - echo - echo "FAIL: No raspiblitz.conf found afer migration restore" - echo "error='migration contains no raspiblitz.conf'" - sleep 3 - exit 1 - fi - - echo - echo "OK: Migration data was imported" - echo "PRESS ENTER" - read key - - # Copy from other computer is only option for Bitcoin - if [ "${network}" == "bitcoin" ] && [ ${useBlockchain} -eq 0 ]; then - OPTIONS=(SYNC "Re-Sync & Validate Blockchain" \ - COPY "Copy over LAN from other Computer" - ) - CHOICE=$(whiptail --clear --title "How to get Blockchain?" --menu "" 9 52 2 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - COPY) - echo "Copy Blockchain Data -->" - /home/admin/50copyHDD.sh stop-after-script - ;; - esac - fi - - # if there is no blockchain yet - fallback to syncing - if [ $(sudo ls /mnt/hdd/bitcoin/ 2>/dev/null | grep -c blocks) -eq 0 ]; then - echo "Setting Blockchain Data to resync ..." - sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null - sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null - sudo -u bitcoin touch /mnt/hdd/${network}/blocks/.selfsync - fi - - echo "--> Now rebooting and kicking your node in to recovery/update mode ..." - sudo shutdown -r now + # correcting all user rights on data will be done by provisioning process + echo "# OK import done - provisioning process needed" exit 0 fi echo "error='unkown command'" -exit 1 +exit 1 \ No newline at end of file From 7d01ef1c1f61115041212ca0b8d6e1b642edd00f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:00:01 +0200 Subject: [PATCH 056/293] cleaner file seperation --- home.admin/00provisionDialog.sh | 237 ------------------ home.admin/00provisionInfo.sh | 14 -- home.admin/XXsyncScripts.sh | 9 +- home.admin/_commands.sh | 7 + home.admin/config.scripts/lnd.backup.sh | 41 +-- home.admin/setup.scripts/dialogBasicSetup.sh | 58 +++++ .../setup.scripts/dialogLightningWallet.sh | 164 ++++++++++++ .../dialogMigration.sh} | 167 ++++-------- home.admin/setup.scripts/dialogName.sh | 31 +++ home.admin/setup.scripts/dialogPasswords.sh | 99 ++++++++ .../setup.scripts/setupDialogControl.sh | 113 +++++++++ 11 files changed, 551 insertions(+), 389 deletions(-) delete mode 100755 home.admin/00provisionDialog.sh delete mode 100755 home.admin/00provisionInfo.sh create mode 100644 home.admin/setup.scripts/dialogBasicSetup.sh create mode 100644 home.admin/setup.scripts/dialogLightningWallet.sh rename home.admin/{00migrationDialog.sh => setup.scripts/dialogMigration.sh} (53%) create mode 100644 home.admin/setup.scripts/dialogName.sh create mode 100644 home.admin/setup.scripts/dialogPasswords.sh create mode 100755 home.admin/setup.scripts/setupDialogControl.sh diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh deleted file mode 100755 index 2bedc4b94..000000000 --- a/home.admin/00provisionDialog.sh +++ /dev/null @@ -1,237 +0,0 @@ -#!/bin/bash - -# get basic info -source /home/admin/raspiblitz.info - -# temp file for dialog results -_temp=$(mktemp -p /dev/shm/) - -# flags of what passwords are to set by user -setPasswordA=1 -setPasswordB=1 -setPasswordC=1 - -# choose blockchain or select migration -OPTIONS=() -OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") -OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") -OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") -OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") -CHOICE=$(dialog --clear \ - --backtitle "RaspiBlitz ${codeVersion} - Setup" \ - --title "⚡ Welcome to your RaspiBlitz ⚡" \ - --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ - 13 64 7 \ - "${OPTIONS[@]}" \ - 2>&1 >/dev/tty) -clear -network="" -lightning="" -case $CHOICE in - BITCOIN1) - network="bitcoin" - lightning="lnd" - ;; - BITCOIN2) - network="bitcoin" - lightning="cln" - ;; - LITECOIN) - network="litecoin" - lightning="lnd" - ;; - MIGRATION) - # send over to the migration dialogs - /home/admin/00migrationDialog.sh raspiblitz - exit 0 - ;; -esac - -# on cancel - exit to terminal -if [ "${network}" == "" ]; then - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 -fi - -# prepare the config file (what will later become the raspiblitz.config) -source /home/admin/_version.info -CONFIGFILE="/home/admin/raspiblitz.config.tmp" -rm $CONFIGFILE 2>/dev/null -echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE -echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE -echo "lcdrotate=1" >> $CONFIGFILE -echo "lightning=${lightning}" >> $CONFIGFILE -echo "network=${network}" >> $CONFIGFILE -echo "chain=main" >> $CONFIGFILE -echo "runBehindTor=on" >> $CONFIGFILE - -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE - -################### -# ENTER NAME -################### - -# welcome and ask for name of RaspiBlitz -result="" -while [ ${#result} -eq 0 ] - do - l1="Please enter the name of your new RaspiBlitz:\n" - l2="one word, keep characters basic & not too long" - dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp - result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) - shred -u $_temp - echo "processing ..." - sleep 3 - done -echo "hostname=${result}" >> $CONFIGFILE - -################### -# DECIDE LIGHTNING -# do this before passwords, because password C not needed if LND rescue file is uploaded -################### - -# flags for sub dialogs after choice -uploadLNDRESCUE=0 -enterSEED=0 -uploadSCB=0 - -OPTIONS=() -OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") -OPTIONS+=(OLD "I had an old Node I want to recover/restore") -CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - -if [ "${CHOICE}" == "NEW" ]; then - - # mark all passwords to be set at the end - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 - -elif [ "${CHOICE}" == "OLD" ]; then - - CHOICE="" - while [ "${CHOICESUB}" == "" ] - do - - # get more details what kind of old lightning wallet user has - OPTIONS=() - OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") - OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") - OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - - if [ "${CHOICESUB}" == "LNDRESCUE" ]; then - - # just activate LND rescue upload - uploadLNDRESCUE=1 - - # dont set password c anymore later on - setPasswordC=0 - - elif [ "${CHOICESUB}" == "SEED+SCB" ]; then - - # activate SEED input & SCB upload - enterSEED=1 - uploadSCB=1 - - elif [ "${CHOICESUB}" == "ONLYSEED" ]; then - - # let people know about the difference between SEED & SEED+SCB - whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " -Using JUST SEED WORDS will only recover your on-chain funds. -To also try to recover the open channel funds you need the -channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) -or having a complete LND rescue-backup from your old node. - " 11 65 - - if [ $? -eq 1 ]; then - # when user wants to go back - CHOICESUB="" - else - # activate SEED input & SCB upload - enterSEED=1 - fi - - else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi - - done - -else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 -fi - -# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) -if [ ${uploadLNDRESCUE} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $SETUPFILE - exit 1 -fi - -# INPUT LIGHTNING SEED dialog (if activated by dialogs above) -if [ ${enterSEED} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh seed-import-gui - # load results from results file - source <(/var/cache/raspiblitz/seed-import.results) - # if user canceled the seed input - if [ "${seedWords}" == "" ]; then - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi - echo "seedWords='${seedWords}'" >> $SETUPFILE - echo "seedPassword='${seedPassword}'" >> $SETUPFILE -fi - -# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) -if [ ${uploadSCB} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $SETUPFILE -fi - -################### -# ENTER PASSWORDS ---> combine with migration dialog to reduce code duplication -################### - -# show password info dialog -dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. -Referenced as password A, B & C. - -PASSWORD A) Main User Password (SSH & WebUI, sudo) -PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Password for Unlock - -Set now the 3 passwords - all min 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 15 54 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp -password=$(sudo cat $_temp) -echo "passwordA='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp -password=$(sudo cat $_temp) -echo "passwordB='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp -password=$(sudo cat $_temp) -echo "passwordC='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 - -clear -echo "# setup dialog done - results in:" -echo "# $CONFIGFILE" -echo "# $SETUPFILE" \ No newline at end of file diff --git a/home.admin/00provisionInfo.sh b/home.admin/00provisionInfo.sh deleted file mode 100755 index a2796a09c..000000000 --- a/home.admin/00provisionInfo.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -_temp=$(mktemp -p /dev/shm/) - -## get basic info -source /home/admin/raspiblitz.info 2>/dev/null - -################### -# CHECK IF DNS NEEDS SETTING DURING SETUP -# https://github.com/rootzoll/raspiblitz/issues/787 -################### -sudo /home/admin/config.scripts/internet.dns.sh test - -# TODO: if DNS is not working --> ask in provision dialog -# TODO: get size of sd card & free space on sd card \ No newline at end of file diff --git a/home.admin/XXsyncScripts.sh b/home.admin/XXsyncScripts.sh index 1e537d225..575f02a8e 100755 --- a/home.admin/XXsyncScripts.sh +++ b/home.admin/XXsyncScripts.sh @@ -158,12 +158,9 @@ fi echo "# COPYING from GIT-Directory to /home/admin/" sudo rm -r /home/admin/config.scripts -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/*.* /home/admin -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/assets /home/admin -sudo -u admin chmod +x /home/admin/*.sh -sudo -u admin chmod +x /home/admin/*.py -sudo -u admin chmod +x /home/admin/config.scripts/*.sh -sudo -u admin chmod +x /home/admin/config.scripts/*.py +sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/* /home/admin +sudo -u admin chmod -R +x /home/admin/config.scripts +sudo -u admin chmod -R +x /home/admin/setup.scripts echo "# ******************************************" echo "# Checking if the content of BlitzPy changed .." diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cb1ccf744..cde070212 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -23,6 +23,13 @@ function menu() { ./00mainMenu.sh } +# command: setup +# calls the setup process +function setup() { + cd /home/admin + ./setup.scripts/setupDialogControl.sh +} + # command: repair # calls directly the repair menu function repair() { diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 7dd32f2b6..fe32f5774 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -8,19 +8,19 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# lnd.backup.sh lnd-export" echo "# lnd.backup.sh lnd-export-gui" echo "# lnd.backup.sh lnd-import [file]" - echo "# lnd.backup.sh lnd-import-gui [setup|production]" + echo "# lnd.backup.sh lnd-import-gui [setup|production] [?resultfile]" echo "# ---------------------------------------------------" echo "# STATIC CHANNEL BACKUP" echo "# ---------------------------------------------------" echo "# lnd.backup.sh scb-export" echo "# lnd.backup.sh scb-export-gui" echo "# lnd.backup.sh scb-import [file]" - echo "# lnd.backup.sh scb-import-gui [setup|production]" + echo "# lnd.backup.sh scb-import-gui [setup|production] [?resultfile]" echo "# ---------------------------------------------------" echo "# SEED WORDS" echo "# ---------------------------------------------------" echo "# lnd.backup.sh seed-export-gui [lndseeddata]" - echo "# lnd.backup.sh seed-import-gui" + echo "# lnd.backup.sh seed-import-gui [resultfile]" exit 1 fi @@ -163,10 +163,10 @@ if [ ${mode} = "lnd-import-gui" ]; then exit 1 fi - # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in if [ "${scenario}" == "setup" ]; then - SETUPFILE=$3 - if [ "${SETUPFILE}" == "" ]; then + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -235,8 +235,8 @@ if [ ${mode} = "lnd-import-gui" ]; then # in setup scenario the final import is happening during provison if [ "${scenario}" == "setup" ]; then # just add lndrescue filename to give file - echo "lndrescue='${filename}'" >> $SETUPFILE - echo "" + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "lndrescue='${filename}'" >> $RESULTFILE exit 0 fi @@ -349,10 +349,10 @@ if [ ${mode} = "scb-import-gui" ]; then exit 1 fi - # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in if [ "${scenario}" == "setup" ]; then - SETUPFILE=$3 - if [ "${SETUPFILE}" == "" ]; then + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -421,8 +421,8 @@ if [ ${mode} = "scb-import-gui" ]; then # in setup scenario the final import is happening during provison if [ "${scenario}" == "setup" ]; then # just add staticchannelbackup filename to give file - echo "staticchannelbackup='${filename}'" >> $SETUPFILE - echo "" + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "staticchannelbackup='${filename}'" >> $RESULTFILE exit 0 fi @@ -471,6 +471,13 @@ if [ ${mode} = "seed-import-gui" ]; then # fake seed 24 words for testing input: # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + # prepare seed result file sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null sudo touch /var/cache/raspiblitz/seed-import.results @@ -515,7 +522,7 @@ wordone wordtweo wordthree ... if [ $? -eq 1 ]; then clear - echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" + echo "# CANCEL empty results in: ${RESULTFILE}" exit 1 fi fi @@ -540,9 +547,9 @@ to protect the seed words. Most users did not set this. # writing result file data clear - echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" - echo "seedWords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results - echo "seedPassword='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "seedWords='${wordstring}'" >> $RESULTFILE + echo "seedPassword='${passwordD}'" >> $RESULTFILE exit 0 fi diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh new file mode 100644 index 000000000..6281fc494 --- /dev/null +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +# choose blockchain or select migration +OPTIONS=() +OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") +OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") +OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") +OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") +CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Welcome to your RaspiBlitz ⚡" \ + --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ + 13 64 7 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) +clear +network="" +lightning="" +migrationOS="" +case $CHOICE in + BITCOIN1) + network="bitcoin" + lightning="lnd" + ;; + BITCOIN2) + network="bitcoin" + lightning="cln" + ;; + LITECOIN) + network="litecoin" + lightning="lnd" + ;; + MIGRATION) + migrationOS="raspiblitz" + ;; +esac + +# on cancel - exit with 1 +if [ "${network}" == "" ] && [ "${migrationOS}" == "" ]; then + exit 1 +fi + +# write results to setup sate +echo "migrationOS=${migrationOS}" >> $SETUPFILE +echo "migrationVersion=''" >> $SETUPFILE +echo "lightning=${lightning}" >> $SETUPFILE +echo "network=${network}" >> $SETUPFILE + +exit 0 \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh new file mode 100644 index 000000000..c2ab95b1b --- /dev/null +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -0,0 +1,164 @@ +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +# flags for sub dialogs after choice +uploadLNDRESCUE=0 +enterSEED=0 +uploadSCB=0 + +OPTIONS=() +OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") +OPTIONS+=(OLD "I had an old Node I want to recover/restore") +CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +if [ "${CHOICE}" == "NEW" ]; then + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + +elif [ "${CHOICE}" == "OLD" ]; then + + CHOICE="" + while [ "${CHOICESUB}" == "" ] + do + + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + if [ "${CHOICESUB}" == "LNDRESCUE" ]; then + + # just activate LND rescue upload + uploadLNDRESCUE=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # dont set password c anymore - mark the rest + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + + elif [ "${CHOICESUB}" == "SEED+SCB" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 + + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then + + # let people know about the difference between SEED & SEED+SCB + whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " +Using JUST SEED WORDS will only recover your on-chain funds. +To also try to recover the open channel funds you need the +channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) +or having a complete LND rescue-backup from your old node. + " 11 65 + + if [ $? -eq 1 ]; then + # when user wants to go back + CHOICESUB="" + else + # activate SEED input & SCB upload + enterSEED=1 + fi + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + + done + +else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 +fi + +# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) +if [ ${uploadLNDRESCUE} -eq 1 ]; then + + # run upload dialog and get result + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled upload + if [ "${lndrescue}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^lndrescue=/d' $SETUPFILE + + # store result in setup state + echo "lndrescue='${lndrescue}'" >> $SETUPFILE +fi + +# INPUT LIGHTNING SEED dialog (if activated by dialogs above) +if [ ${enterSEED} -eq 1 ]; then + + # start seed input and get results + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled the seed input + if [ "${seedWords}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^seedWords=/d' $SETUPFILE + sudo sed -i '/^seedPassword=/d' $SETUPFILE + + # write the seed data into the setup state + echo "seedWords='${seedWords}'" >> $SETUPFILE + echo "seedPassword='${seedPassword}'" >> $SETUPFILE +fi + +# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) +if [ ${uploadSCB} -eq 1 ]; then + + # start seed input and get results + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled the upload + if [ "${staticchannelbackup}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^staticchannelbackup=/d' $SETUPFILE + + # write the filename into the setup state + echo "staticchannelbackup='${staticchannelbackup}'" >> $SETUPFILE + +fi \ No newline at end of file diff --git a/home.admin/00migrationDialog.sh b/home.admin/setup.scripts/dialogMigration.sh similarity index 53% rename from home.admin/00migrationDialog.sh rename to home.admin/setup.scripts/dialogMigration.sh index e98958844..d34b8956b 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -1,41 +1,36 @@ #!/bin/bash -# TODO: use blitz.upload.sh for uploading the migration file -# TODO: also the migration might need to be adapted to work with an already mounted HDD later +# TODO: also the raspiblitz-migration & other-node-migration might need to be adapted to work with an already mounted HDD later -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# dialog to get all data needed for migration-setup" - echo "# 00migrationDialog.sh [raspiblitz|mynode|umbrel]" - exit 1 -fi - -## get basic info +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has source /home/admin/raspiblitz.info -# tempfile for result of dialogs -_temp=$(mktemp -p /dev/shm/) +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE +######################### +# Parameters +# this is useful for testing the dialog outside of the setup process +# normally migrationOS & migrationVersion are provided by raspiblitz.info or raspiblitz.setup -# flags of what passwords are to set by user -setPasswordA=1 -setPasswordB=0 -setPasswordC=0 - -# 1st PARAMATER: [raspiblitz|mynode|umbrel] -migrationOS="$1" -if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then - echo "parameter1(${migrationOS})" - echo "error='not supported'" - exit 1 -fi +# 1st PARAMATER (optional): [raspiblitz|mynode|umbrel] +if [ "${migrationOS}" == "" ]; then + migrationOS="$1" +fi # 2nd PARAMATER (optional): the version of the former fullnode OS if available -migrationVersion="$2" +if [ "${migrationVersion}" == "" ]; then + migrationVersion="$2" +fi + +# check parameter values +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then + echo "# FAIL: the given migrationOS '${migrationOS}' is not supported yet" + exit 1 +fi #################################################### # RASPIBLITZ @@ -44,10 +39,6 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then - # write migration info - echo "migrationOS='${migrationOS}'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - # get defaultUploadPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) @@ -95,18 +86,19 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "PRESS ENTER to continue & retry" read key else - echo "!! WARNING !! Unknown State (report to devs)" + echo "!! WARNING !! Unknown State (report to devs) error(${error})" exit 1 fi done # further checks and unpacking will be done when migration is processed (not part of dialog) - echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${filename}'" >> $SETUPFILE + echo "OK: Migration file was imported - will process after password reset" sleep 4 - + # migration OS & Version were already set earlier in setup process - now add migration filename + echo "migrationFile='${filename}'" >> $SETUPFILE # user needs to reset password A - setPasswordA=1 + echo "setPasswordA=1" >> $SETUPFILE + exit 0 fi @@ -127,20 +119,20 @@ Please make sure to have your UMBREL seed words & static channel backup file (ju Do you want to start migration to RaspiBlitz now? " 16 58 - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='umbrel'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE + if [ "$?" != "0" ]; then + # user cancel - signal by exit code exit 1 fi - # user needs to reset password A - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 + # write migration info + echo "migrationOS='umbrel'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + + # user needs to reset password A, B & C + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + exit 0 fi @@ -161,76 +153,21 @@ Please make sure to have your MYNODE seed words & static channel backup file (ju Do you want to start migration to RaspiBlitz now? " 16 58 - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='mynode'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE + if [ "$?" != "0" ]; then + # user cancel - signal by exit code exit 1 fi + # write migration info + echo "migrationOS='mynode'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # user needs to reset password A - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + exit 0 fi -#################################################### -# INPUT PASSWORDS (based on flags above set) - -# dynamic info string on what passwords need to be changed -passwordinfo="A" # always so far -if [ ${setPasswordB} -eq 1 ]; then - passwordinfo = "${passwordinfo}, B" -fi -if [ ${setPasswordC} -eq 1 ]; then - passwordinfo = "${passwordinfo}, C" -fi - -# basic information in RaspiBlitz passwords -dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. - -RaspiBlitz works with 3 different passwords: -PASSWORD A) Main User Password (SSH & WebUI, sudo) -PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Password for Unlock - -You will need to set Password: ${passwordinfo} -(other passwords might stay like on your old node) - -Follow Password Rules: Minimal of 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 17 64 - -if [ ${setPasswordA} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp - password=$(sudo cat $_temp) - echo "passwordA='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 -fi - -if [ ${setPasswordB} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp - password=$(sudo cat $_temp) - echo "passwordB='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 -fi - -if [ ${setPasswordC} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp - password=$(sudo cat $_temp) - echo "passwordC='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -fi - -clear -echo "# data from dialogs stored in to be further processed:" -echo "${SETUPFILE}" -exit 0 \ No newline at end of file +echo "FAIL: Exited in unknown state from migration dialog." +exit 1 \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh new file mode 100644 index 000000000..3186e5ccc --- /dev/null +++ b/home.admin/setup.scripts/dialogName.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +################### +# ENTER NAME +################### + +# temp file for password results +_temp="/var/cache/raspiblitz/.temp.tmp" + +# ask for name of RaspiBlitz +result="" +while [ ${#result} -eq 0 ] + do + l1="Please enter the name of your new RaspiBlitz:\n" + l2="one word, keep characters basic & not too long" + dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) + sudo rm $_temp + done + +# store name in setup state +echo "hostname=${result}" >> $SETUPFILE \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh new file mode 100644 index 000000000..d89a052ef --- /dev/null +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +#################################################### +# INPUT PASSWORDS (based on flags from raspiblitz.setup) + +# dynamic info string on what passwords need to be changed +passwordinfo="A" # always so far +if [ "${setPasswordB}" == "1" ]; then + passwordinfo = "${passwordinfo}, B" +fi +if [ "${setPasswordC}" == "1" ]; then + passwordinfo = "${passwordinfo}, C" +fi + +# if passwords are set in a migration situation, use different info text +if [ "${migrationOS}" == "" ]; then + + # info text on normal setup + dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. +Referenced as password A, B & C. + +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (Additional Apps & API) +PASSWORD C) Lightning Wallet Password for Unlock + +You will need to set now Password: ${passwordinfo} + +Follow Password Rule: Minimal of 8 chars,, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 16 54 + +else + + # info text on migration setup + dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + +RaspiBlitz works with 3 different passwords: +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (Additional Apps & API) +PASSWORD C) Lightning Wallet Password for Unlock + +You will need to set now Password: ${passwordinfo} +(other passwords might stay like on your old node) + +Follow Password Rules: Minimal of 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 17 64 + +fi + +# temp file for password results +_temp="/var/cache/raspiblitz/.temp.tmp" + +# PASSWORD A +if [ "${setPasswordA}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordA='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 +fi + +# PASSWORD B +if [ "${setPasswordB}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordB='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 +fi + +# PASSWORD C +if [ "${setPasswordC}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordC='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 +fi + +# debug info +clear +echo "# data from dialogs stored in to be further processed:" +echo "${SETUPFILE}" +exit 0 diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh new file mode 100755 index 000000000..7bd95cbb8 --- /dev/null +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" + +# init SETUPFILE +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE + +############################################ +# Basic Setup (Blockchain & Lightning Impl) +# (skip if migration was auto-detected) + +if [ "${migrationOS}" == "" ]; then + + /home/admin/setup/dialogBasicSetup.sh + + # on cancel - let user exit to terminal + if [ "$?" != "0" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + +fi + +if [ "${migrationOS}" != "" ]; then + + ############################################### + # MIGRATION + # other fullnodesOS or RaspiBlitz migration file + + echo "# Starting migration dialog ..." + + /home/admin/setup/dialogMigration.sh + + # on cancel - let user exit to terminal + if [ "$?" != "0" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + +else + + ############################################### + # FRESH SETUP + + echo "# Starting all dialogs for fresh setup ..." + + ############################################ + # Setting Name for Node + + /home/admin/setup/dialogPasswords.sh + + ############################################ + # Lightning Wallet (new or restore) do this before passwords + # because password C not needed if LND rescue file is uploaded + + while loop + +fi + +############################################ +# Enter Passwords +# for fresh setup & migration + +/home/admin/setup/dialogPasswords.sh + +############################################ +# PROCESS SETUP CHOICES +# TODO: move this part later outside of dialog controller and combine with data from WebUI + +if [ "${migrationOS}" == "" ]; then + + ############################################ + # Normal Setup + + echo "# CREATING raspiblitz.conf from your setup choices" + + # prepare the config file (what will later become the raspiblitz.config) + source /home/admin/_version.info + + CONFIGFILE="/mnt/hdd/raspiblitz.config" + rm $CONFIGFILE 2>/dev/null + echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE + echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE + echo "lcdrotate=1" >> $CONFIGFILE + echo "lightning=${lightning}" >> $CONFIGFILE + echo "network=${network}" >> $CONFIGFILE + echo "chain=main" >> $CONFIGFILE + echo "runBehindTor=on" >> $CONFIGFILE + +else + + ############################################ + # Process Migration + # TODO: move this part later outside of dialog controller and combine with data from WebUI + + echo "TODO: Process Migration" + exit 1 + +fi + +clear +echo "# setup dialog done - results in:" +echo "# $SETUPFILE" +echo "# $CONFIGFILE" \ No newline at end of file From ba8a9dc06fd3b9f18ab357230a0880e9b2036108 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:03:37 +0200 Subject: [PATCH 057/293] correct script path --- home.admin/setup.scripts/00provisionInfo.sh | 10 ++++++++++ home.admin/setup.scripts/setupDialogControl.sh | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100755 home.admin/setup.scripts/00provisionInfo.sh diff --git a/home.admin/setup.scripts/00provisionInfo.sh b/home.admin/setup.scripts/00provisionInfo.sh new file mode 100755 index 000000000..8b1bcab7a --- /dev/null +++ b/home.admin/setup.scripts/00provisionInfo.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +################### +# CHECK IF DNS NEEDS SETTING DURING SETUP +# https://github.com/rootzoll/raspiblitz/issues/787 +################### +sudo /home/admin/config.scripts/internet.dns.sh test + +# TODO: if DNS is not working --> ask in system-loop +# TODO: get size of sd card & free space on sd card \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 7bd95cbb8..1e62f126a 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -18,7 +18,7 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE if [ "${migrationOS}" == "" ]; then - /home/admin/setup/dialogBasicSetup.sh + /home/admin/setup.scripts/dialogBasicSetup.sh # on cancel - let user exit to terminal if [ "$?" != "0" ]; then @@ -37,7 +37,7 @@ if [ "${migrationOS}" != "" ]; then echo "# Starting migration dialog ..." - /home/admin/setup/dialogMigration.sh + /home/admin/setup.scripts/dialogMigration.sh # on cancel - let user exit to terminal if [ "$?" != "0" ]; then @@ -56,7 +56,7 @@ else ############################################ # Setting Name for Node - /home/admin/setup/dialogPasswords.sh + /home/admin/setup.scripts/dialogPasswords.sh ############################################ # Lightning Wallet (new or restore) do this before passwords @@ -70,7 +70,7 @@ fi # Enter Passwords # for fresh setup & migration -/home/admin/setup/dialogPasswords.sh +/home/admin/setup.scripts/dialogPasswords.sh ############################################ # PROCESS SETUP CHOICES From 2b2058ffbf16a8deed6aa850d2d7587079500509 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:13:54 +0200 Subject: [PATCH 058/293] comment code --- .../setup.scripts/setupDialogControl.sh | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 1e62f126a..b0e7a5a13 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -18,6 +18,7 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE if [ "${migrationOS}" == "" ]; then + echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogBasicSetup.sh # on cancel - let user exit to terminal @@ -36,7 +37,6 @@ if [ "${migrationOS}" != "" ]; then # other fullnodesOS or RaspiBlitz migration file echo "# Starting migration dialog ..." - /home/admin/setup.scripts/dialogMigration.sh # on cancel - let user exit to terminal @@ -51,18 +51,29 @@ else ############################################### # FRESH SETUP - echo "# Starting all dialogs for fresh setup ..." - ############################################ # Setting Name for Node + echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogPasswords.sh ############################################ # Lightning Wallet (new or restore) do this before passwords # because password C not needed if LND rescue file is uploaded - while loop + lightningWalletDone=0 + while [ "${lightningWalletDone}" == "0" ] + do + + echo "# Starting lightning wallet dialog ..." + /home/admin/setup.scripts/dialogLightningWallet.sh + + # only if dialog exited clean end loop + if [ "$?" == "0" ]; then + lightningWalletDone=1 + fi + + done fi @@ -70,6 +81,7 @@ fi # Enter Passwords # for fresh setup & migration +echo "# Starting passwords dialog ..." /home/admin/setup.scripts/dialogPasswords.sh ############################################ From e09d951920c95ed7ac25e75215849973fb52e2a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:21:29 +0200 Subject: [PATCH 059/293] exit states --- .../setup.scripts/dialogLightningWallet.sh | 20 +++++++++---------- .../setup.scripts/setupDialogControl.sh | 10 +++++++++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index c2ab95b1b..579d4c73e 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -81,16 +81,14 @@ or having a complete LND rescue-backup from your old node. fi else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 + # user cancel - signal to outside app by exit code (2 = submenu) + exit 2 fi done else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" + # user cancel - signal to outside app by exit code (1 = mainmenu) exit 1 fi @@ -105,8 +103,8 @@ if [ ${uploadLNDRESCUE} -eq 1 ]; then # if user canceled upload if [ "${lndrescue}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (3 = exit on lndrescue) + exit 3 fi # clear setup state from all fomer possible choices (previous loop) @@ -127,8 +125,8 @@ if [ ${enterSEED} -eq 1 ]; then # if user canceled the seed input if [ "${seedWords}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (4 = exit on seedwords) + exit 4 fi # clear setup state from all fomer possible choices (previous loop) @@ -151,8 +149,8 @@ if [ ${uploadSCB} -eq 1 ]; then # if user canceled the upload if [ "${staticchannelbackup}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (5 = exit on scb) + exit 5 fi # clear setup state from all fomer possible choices (previous loop) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index b0e7a5a13..14cfc9e98 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -55,7 +55,7 @@ else # Setting Name for Node echo "# Starting basic setup dialog ..." - /home/admin/setup.scripts/dialogPasswords.sh + /home/admin/setup.scripts/dialogName.sh ############################################ # Lightning Wallet (new or restore) do this before passwords @@ -73,6 +73,14 @@ else lightningWalletDone=1 fi + # allow user to cancel to terminal on dialog main menu + # all other cancels have other exit codes + if [ "$?" == "1" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + done fi From feaefe30e009e771826296b5f13c0f8cc860d85e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:23:40 +0200 Subject: [PATCH 060/293] debug test --- home.admin/setup.scripts/dialogPasswords.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index d89a052ef..236620d52 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -9,6 +9,10 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" source <($SETUPFILE) +# debug test +echo "setPasswordA(${setPasswordA})" +sleep + #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) From 05077b8ebe38065ed61ce328d1fdd3e07e4ae94a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:27:03 +0200 Subject: [PATCH 061/293] debug sleep --- home.admin/setup.scripts/dialogPasswords.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 236620d52..920fd733c 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -11,7 +11,7 @@ source <($SETUPFILE) # debug test echo "setPasswordA(${setPasswordA})" -sleep +sleep 4 #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) From 17c0ce031f5e8fdd9ba4e6d4171514525a19c793 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:28:50 +0200 Subject: [PATCH 062/293] init setup file --- home.admin/setup.scripts/setupDialogControl.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 14cfc9e98..5f30c1c42 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -9,8 +9,10 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" # init SETUPFILE -rm $SETUPFILE 2>/dev/null +sudo rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE +sudo chown admin:admin $SETUPFILE +sudo chmod 777 $SETUPFILE ############################################ # Basic Setup (Blockchain & Lightning Impl) From 43ded3b094c7ca776afb1a1785e598f74b55d431 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:30:56 +0200 Subject: [PATCH 063/293] syntax fix setupfile --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 6281fc494..7473e4a04 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -50,7 +50,7 @@ if [ "${network}" == "" ] && [ "${migrationOS}" == "" ]; then fi # write results to setup sate -echo "migrationOS=${migrationOS}" >> $SETUPFILE +echo "migrationOS='${migrationOS}'" >> $SETUPFILE echo "migrationVersion=''" >> $SETUPFILE echo "lightning=${lightning}" >> $SETUPFILE echo "network=${network}" >> $SETUPFILE From 3586175adc422ef423943747410893543c172130 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:32:36 +0200 Subject: [PATCH 064/293] fix sourcing setup file --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- home.admin/setup.scripts/dialogLightningWallet.sh | 2 +- home.admin/setup.scripts/dialogMigration.sh | 2 +- home.admin/setup.scripts/dialogName.sh | 2 +- home.admin/setup.scripts/dialogPasswords.sh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 7473e4a04..3bdccb203 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # choose blockchain or select migration OPTIONS=() diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 579d4c73e..70c5f863d 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -5,7 +5,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # flags for sub dialogs after choice uploadLNDRESCUE=0 diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index d34b8956b..e6a5395e0 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -9,7 +9,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE ######################### # Parameters diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 3186e5ccc..be63b645d 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE ################### # ENTER NAME diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 920fd733c..a70c02425 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # debug test echo "setPasswordA(${setPasswordA})" From 280fc2886f7fff0081945edabd7860befca427e9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:50:44 +0200 Subject: [PATCH 065/293] password confirm wording --- home.admin/setup.scripts/dialogPasswords.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index a70c02425..ec75a0f67 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -9,10 +9,6 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" source $SETUPFILE -# debug test -echo "setPasswordA(${setPasswordA})" -sleep 4 - #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) @@ -73,7 +69,7 @@ if [ "${setPasswordA}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordA='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password A accepted.\n\nUse this password for future SSH or Web-Admin logins to your RaspiBlitz & for sudo commands." 11 35 fi # PASSWORD B @@ -83,7 +79,7 @@ if [ "${setPasswordB}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordB='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password B accepted.\n\nUse this password as login for\nadditial Apps & API access." 10 34 fi # PASSWORD C @@ -93,7 +89,7 @@ if [ "${setPasswordC}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordC='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password C accepted.\n\nAlways use this password to \nunlock your Lightning Wallet." 10 34 fi # debug info From 8e984c58c91450950d38211de1c32b13bbd53394 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:56:39 +0200 Subject: [PATCH 066/293] prepare config --- home.admin/setup.scripts/setupDialogControl.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 5f30c1c42..a44367659 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -105,11 +105,18 @@ if [ "${migrationOS}" == "" ]; then echo "# CREATING raspiblitz.conf from your setup choices" - # prepare the config file (what will later become the raspiblitz.config) + # prepate config file + CONFIGFILE="/mnt/hdd/raspiblitz.conf.tmp" + sudo rm $CONFIGFILE 2>/dev/null + sudo chown admin:admin $CONFIGFILE + sudo chmod 777 $CONFIGFILE + + # source the raspiblitz version source /home/admin/_version.info - CONFIGFILE="/mnt/hdd/raspiblitz.config" - rm $CONFIGFILE 2>/dev/null + # source the setup state fresh + source $SETUPFILE + echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE echo "lcdrotate=1" >> $CONFIGFILE @@ -124,6 +131,9 @@ else # Process Migration # TODO: move this part later outside of dialog controller and combine with data from WebUI + # source the setup state fresh + source $SETUPFILE + echo "TODO: Process Migration" exit 1 From 0c9fe9a68414140c4337b05e0047e1cd75ddb648 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:12:52 +0200 Subject: [PATCH 067/293] set passwords in all lightning choices --- .../setup.scripts/dialogLightningWallet.sh | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 70c5f863d..b94c03cde 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -62,6 +62,16 @@ elif [ "${CHOICE}" == "OLD" ]; then enterSEED=1 uploadSCB=1 + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then # let people know about the difference between SEED & SEED+SCB @@ -78,6 +88,17 @@ or having a complete LND rescue-backup from your old node. else # activate SEED input & SCB upload enterSEED=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + fi else From 2c030b317faa24c7f83fbab5f90c80f406c864e0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:13:32 +0200 Subject: [PATCH 068/293] debug sleeps --- home.admin/setup.scripts/dialogLightningWallet.sh | 2 ++ home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index b94c03cde..03e81d9cc 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -106,6 +106,8 @@ or having a complete LND rescue-backup from your old node. exit 2 fi + sleep 3 + done else diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index a44367659..c81b4d168 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -83,6 +83,8 @@ else exit 1 fi + sleep 3 + done fi From b98b5735238b326c55430879d5065db84b439ad5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:14:50 +0200 Subject: [PATCH 069/293] fix temp source --- home.admin/setup.scripts/dialogLightningWallet.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 03e81d9cc..ab4466e9a 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -121,7 +121,7 @@ if [ ${uploadLNDRESCUE} -eq 1 ]; then # run upload dialog and get result _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled upload @@ -143,7 +143,7 @@ if [ ${enterSEED} -eq 1 ]; then # start seed input and get results _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled the seed input @@ -167,7 +167,7 @@ if [ ${uploadSCB} -eq 1 ]; then # start seed input and get results _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled the upload From f97a0619c92da702e6079fe72055ef6061ed88b0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:18:24 +0200 Subject: [PATCH 070/293] typo fix --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index fe32f5774..2e1506b72 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -190,7 +190,7 @@ if [ ${mode} = "lnd-import-gui" ]; then echo "* UPLOAD THE RESCUE FILE *" echo "**************************" echo "If you have a lnd-rescue backup file on your laptop you can now" - echo "upload it and restore the your latest LND state." + echo "upload it and restore your latest LND state." echo echo "CAUTION: Dont restore old LND states - risk of loosing funds!" echo From 283dd40bf2f652d073548a5ef0cacff6c25b8135 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:24:54 +0200 Subject: [PATCH 071/293] directory access --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- home.admin/setup.scripts/dialogLightningWallet.sh | 10 +++++----- home.admin/setup.scripts/dialogMigration.sh | 2 +- home.admin/setup.scripts/dialogName.sh | 4 ++-- home.admin/setup.scripts/dialogPasswords.sh | 4 ++-- home.admin/setup.scripts/setupDialogControl.sh | 7 ++++++- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 3bdccb203..e808e8f8c 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE # choose blockchain or select migration diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index ab4466e9a..4d072ed05 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -4,7 +4,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE # flags for sub dialogs after choice @@ -119,10 +119,10 @@ fi if [ ${uploadLNDRESCUE} -eq 1 ]; then # run upload dialog and get result - _temp="/var/cache/raspiblitz/.temp.tmp" + _temp="/var/cache/raspiblitz/temp/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled upload if [ "${lndrescue}" == "" ]; then @@ -144,7 +144,7 @@ if [ ${enterSEED} -eq 1 ]; then _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled the seed input if [ "${seedWords}" == "" ]; then @@ -168,7 +168,7 @@ if [ ${uploadSCB} -eq 1 ]; then _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled the upload if [ "${staticchannelbackup}" == "" ]; then diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index e6a5395e0..709469f5a 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE ######################### diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index be63b645d..92840e5fc 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE ################### @@ -14,7 +14,7 @@ source $SETUPFILE ################### # temp file for password results -_temp="/var/cache/raspiblitz/.temp.tmp" +_temp="/var/cache/raspiblitz/temp/.temp.tmp" # ask for name of RaspiBlitz result="" diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index ec75a0f67..1bd8ae30e 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE #################################################### @@ -60,7 +60,7 @@ Write them down & store them in a safe place. fi # temp file for password results -_temp="/var/cache/raspiblitz/.temp.tmp" +_temp="/var/cache/raspiblitz/temp/.temp.tmp" # PASSWORD A if [ "${setPasswordA}" == "1" ]; then diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index c81b4d168..60dd0ebd8 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -6,14 +6,19 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" # init SETUPFILE +sudo mkdir /var/cache/raspiblitz/temp +sudo chown admin:admin /var/cache/raspiblitz/temp sudo rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE sudo chown admin:admin $SETUPFILE sudo chmod 777 $SETUPFILE +# init temp directory on mem drive + + ############################################ # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) From 2bbcad6dc6c76680ef9f1f944ac932663334e225 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:27:20 +0200 Subject: [PATCH 072/293] fix action --- home.admin/config.scripts/blitz.upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 8880c6ab6..372cce1d4 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -26,7 +26,7 @@ fi # 1st PRAMETER action action="$1" -if [ ${action} = "prepare-upload" ]; then +if [ "${action}" == "prepare-upload" ]; then # make sure that temp directory exists, is clear and can be written by ${defaultUploadUser} sudo mkdir -p ${defaultUploadPath} 2>/dev/null @@ -39,7 +39,7 @@ if [ ${action} = "prepare-upload" ]; then exit 0 fi -if [ ${action} = "check-upload" ]; then +if [ "${action}" ="" "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From 89825bbf1cf5bb0fe93f878d19cf1a594bab600d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:30:44 +0200 Subject: [PATCH 073/293] fix syntax --- home.admin/config.scripts/blitz.upload.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 372cce1d4..e1d8f10c1 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -83,7 +83,6 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='not *.backup'" exit 1 fi - fi # LND-RESCUE check if file looks valid @@ -108,6 +107,7 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='incorrect checksum'" exit 1 fi + fi # MIGRATION check if file looks valid if [ "${type}" == "migration" ]; then @@ -131,7 +131,6 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='incorrect checksum'" exit 1 fi - fi # ok looks good - return filename & more info From 7b85e8d2244202fd321e37afcb4ee18992258267 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:36:38 +0200 Subject: [PATCH 074/293] debug remove code --- home.admin/config.scripts/blitz.upload.sh | 61 +---------------------- 1 file changed, 1 insertion(+), 60 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index e1d8f10c1..f4d7b507e 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -72,66 +72,7 @@ if [ "${action}" ="" "check-upload" ]; then exit 1 fi - # SCB check if file looks valid - if [ "${type}" == "scb" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not *.backup'" - exit 1 - fi - fi - - # LND-RESCUE check if file looks valid - if [ "${type}" == "lnd-rescue" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not lnd-rescue-*.tar.gz'" - exit 1 - fi - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - echo "# filename(${md5checksum})" - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ "${isCorrect}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='incorrect checksum'" - exit 1 - fi - fi - - # MIGRATION check if file looks valid - if [ "${type}" == "migration" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not raspiblitz-*.tar.gz'" - exit 1 - fi - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - echo "# filename(${md5checksum})" - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ "${isCorrect}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='incorrect checksum'" - exit 1 - fi - fi + # testcut # ok looks good - return filename & more info echo "filename=${filename}" From 1ff12020f075b5d45bccd934081a2fedc997a930 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:25 +0200 Subject: [PATCH 075/293] more debug code cut --- home.admin/config.scripts/blitz.upload.sh | 27 ----------------------- 1 file changed, 27 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index f4d7b507e..1388b1e27 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -45,33 +45,6 @@ if [ "${action}" ="" "check-upload" ]; then type=$2 echo "type='${type}'" - # check if there to less or to many files in upload directory - countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) - if [ ${countFiles} -lt 1 ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='not-found'" - exit 1 - fi - if [ ${countFiles} -gt 1 ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='multiple'" - exit 1 - fi - - # get the file uploaded (full path) - filename=$(sudo ls ${defaultUploadPath}/*.*) - echo "# filename(${filename})" - - # check of size >0 - byteSize=$(ls -l ${filename} | awk '{print $5}') - echo "# byteSize(${byteSize})" - if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='invalid byte size: ${byteSize}'" - exit 1 - fi - # testcut # ok looks good - return filename & more info From d0b89df690ff28a50c9fc3b526a4fcacdbaf5270 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:44 +0200 Subject: [PATCH 076/293] fix code syntax --- home.admin/config.scripts/blitz.upload.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 1388b1e27..9d4a19ec2 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -39,7 +39,7 @@ if [ "${action}" == "prepare-upload" ]; then exit 0 fi -if [ "${action}" ="" "check-upload" ]; then +if [ "${action}" = "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From 976b6ba2444498649e8ed018b6a792f078754509 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:56 +0200 Subject: [PATCH 077/293] fix syntax --- home.admin/config.scripts/blitz.upload.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 9d4a19ec2..ddb1e50db 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -39,7 +39,7 @@ if [ "${action}" == "prepare-upload" ]; then exit 0 fi -if [ "${action}" = "check-upload" ]; then +if [ "${action}" == "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From fb1aeada9ae3418f40927c1a129f7ed03f285a8a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:43:12 +0200 Subject: [PATCH 078/293] re add code --- home.admin/config.scripts/blitz.upload.sh | 88 ++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index ddb1e50db..ae85780ad 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -45,7 +45,93 @@ if [ "${action}" == "check-upload" ]; then type=$2 echo "type='${type}'" - # testcut + # check if there to less or to many files in upload directory + countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) + if [ ${countFiles} -lt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='not-found'" + exit 1 + fi + if [ ${countFiles} -gt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='multiple'" + exit 1 + fi + + # get the file uploaded (full path) + filename=$(sudo ls ${defaultUploadPath}/*.*) + echo "# filename(${filename})" + + # check of size >0 + byteSize=$(ls -l ${filename} | awk '{print $5}') + echo "# byteSize(${byteSize})" + if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='invalid byte size: ${byteSize}'" + exit 1 + fi + + # SCB check if file looks valid + if [ "${type}" == "scb" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not *.backup'" + exit 1 + fi + fi + + # LND-RESCUE check if file looks valid + if [ "${type}" == "lnd-rescue" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not lnd-rescue-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi + + # MIGRATION check if file looks valid + if [ "${type}" == "migration" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not raspiblitz-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi # ok looks good - return filename & more info echo "filename=${filename}" From b95d6bc867a5991e30392c94dc14a76fb4ce1a55 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:49:45 +0200 Subject: [PATCH 079/293] offer user cancel --- home.admin/config.scripts/lnd.backup.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 2e1506b72..27ab6d633 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -213,23 +213,31 @@ if [ ${mode} = "lnd-import-gui" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else + # create no result file and exit echo "!! WARNING !! Unknown State (report to devs)" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi + done # in setup scenario the final import is happening during provison From 8c3b2ce6e317a735089aea771078d6f2db3a6769 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:51:20 +0200 Subject: [PATCH 080/293] fix text --- home.admin/config.scripts/lnd.backup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 27ab6d633..348c69ded 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -212,7 +212,6 @@ if [ ${mode} = "lnd-import-gui" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" read keyRetry elif [ "${error}" == "multiple" ]; then From 384dcde593886e4a41fd6d9699aaa127ac421477 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:54:45 +0200 Subject: [PATCH 081/293] offer user cancel on upload --- home.admin/config.scripts/lnd.backup.sh | 20 +++++++++++++------- home.admin/setup.scripts/dialogMigration.sh | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 348c69ded..85418ef36 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -405,24 +405,30 @@ if [ ${mode} = "scb-import-gui" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else echo "!! WARNING !! Unknown State (report to devs)" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi + done # in setup scenario the final import is happening during provison diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 709469f5a..529d16c40 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -72,23 +72,30 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else + # create no result file and exit echo "!! WARNING !! Unknown State (report to devs) error(${error})" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi done # further checks and unpacking will be done when migration is processed (not part of dialog) From f633e804f816935578229944fbf9c134d8aa0977 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 16:06:48 +0200 Subject: [PATCH 082/293] fix seed enter parameter --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 85418ef36..7c91c58b9 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -485,7 +485,7 @@ if [ ${mode} = "seed-import-gui" ]; then # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das # scenario setup needs a 3rd parameter - the RESULTFILE to store results in - RESULTFILE=$3 + RESULTFILE=$2 if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 From 3179110d6e93ded859aa00b00c0fc995bda839a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 16:51:36 +0200 Subject: [PATCH 083/293] remove debug sleeps --- home.admin/setup.scripts/dialogLightningWallet.sh | 2 -- home.admin/setup.scripts/setupDialogControl.sh | 2 -- 2 files changed, 4 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 4d072ed05..b48908540 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -106,8 +106,6 @@ or having a complete LND rescue-backup from your old node. exit 2 fi - sleep 3 - done else diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 60dd0ebd8..8ce0cf9f0 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -88,8 +88,6 @@ else exit 1 fi - sleep 3 - done fi From 6abc2fc22c6b98d72badfc584fc64d9263fc3335 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:08:44 +0200 Subject: [PATCH 084/293] remove text --- home.admin/setup.scripts/dialogMigration.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 529d16c40..6e8ebd2d2 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -71,7 +71,6 @@ if [ "${migrationOS}" == "raspiblitz" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" read keyRetry elif [ "${error}" == "multiple" ]; then From c568ce3b0eab716d24db48715ab2821683ea5f73 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:10:08 +0200 Subject: [PATCH 085/293] remove sleep --- home.admin/setup.scripts/dialogMigration.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 6e8ebd2d2..7d5482eec 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -97,9 +97,6 @@ if [ "${migrationOS}" == "raspiblitz" ]; then fi done - # further checks and unpacking will be done when migration is processed (not part of dialog) - echo "OK: Migration file was imported - will process after password reset" - sleep 4 # migration OS & Version were already set earlier in setup process - now add migration filename echo "migrationFile='${filename}'" >> $SETUPFILE # user needs to reset password A From 8db8ab7d76708ccfc752b7cb9087138f64b05c37 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:16:28 +0200 Subject: [PATCH 086/293] resfresh setup state --- home.admin/setup.scripts/dialogName.sh | 2 +- home.admin/setup.scripts/setupDialogControl.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 92840e5fc..248c1205a 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -22,7 +22,7 @@ while [ ${#result} -eq 0 ] do l1="Please enter the name of your new RaspiBlitz:\n" l2="one word, keep characters basic & not too long" - dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + dialog --backtitle "RaspiBlitz - Setup" --inputbox "$l1$l2" 11 52 2>$_temp result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) sudo rm $_temp done diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 8ce0cf9f0..ffe529d8e 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" -# init SETUPFILE +# init SETUPFILE & temp dir on mem drive sudo mkdir /var/cache/raspiblitz/temp sudo chown admin:admin /var/cache/raspiblitz/temp sudo rm $SETUPFILE 2>/dev/null @@ -16,9 +16,6 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE sudo chown admin:admin $SETUPFILE sudo chmod 777 $SETUPFILE -# init temp directory on mem drive - - ############################################ # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) @@ -37,6 +34,9 @@ if [ "${migrationOS}" == "" ]; then fi +# source setup state fresh - in case manual migration was choosen +source $SETUPFILE + if [ "${migrationOS}" != "" ]; then ############################################### From ead58095b42037f1b0a130e2905df29bbcb1b5bc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:24:56 +0200 Subject: [PATCH 087/293] rename text --- home.admin/setup.scripts/dialogMigration.sh | 4 ++-- home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 7d5482eec..1bbe640d7 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -113,7 +113,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "No+Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -147,7 +147,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "No+Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index ffe529d8e..4a885a609 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -20,6 +20,7 @@ sudo chmod 777 $SETUPFILE # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) +# migrationOS is from raspiblitz.info if [ "${migrationOS}" == "" ]; then echo "# Starting basic setup dialog ..." @@ -37,6 +38,7 @@ fi # source setup state fresh - in case manual migration was choosen source $SETUPFILE +# migrationOS is from raspiblitz.info but might be overwritten from $SETUPFILE if [ "${migrationOS}" != "" ]; then ############################################### From 8d57f4c9236d5bafaa23dc46b8b67098d713ba35 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:27:18 +0200 Subject: [PATCH 088/293] shutdown --- home.admin/setup.scripts/setupDialogControl.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 4a885a609..a158275cb 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -48,10 +48,9 @@ if [ "${migrationOS}" != "" ]; then echo "# Starting migration dialog ..." /home/admin/setup.scripts/dialogMigration.sh - # on cancel - let user exit to terminal + # on cancel - shutdown system if [ "$?" != "0" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + sudo shutdown now exit 1 fi From 868989d604fe10b552515618298c03ed94134199 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:50:43 +0200 Subject: [PATCH 089/293] debug output --- home.admin/setup.scripts/dialogName.sh | 1 + home.admin/setup.scripts/dialogPasswords.sh | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 248c1205a..eb77ea66d 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -28,4 +28,5 @@ while [ ${#result} -eq 0 ] done # store name in setup state +sudo sed -i '/^hostname=/d' $SETUPFILE echo "hostname=${result}" >> $SETUPFILE \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 1bd8ae30e..48f733a54 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -13,19 +13,26 @@ source $SETUPFILE # INPUT PASSWORDS (based on flags from raspiblitz.setup) # dynamic info string on what passwords need to be changed -passwordinfo="A" # always so far +# at the moment its always +passwordinfo="A" +echo "A" if [ "${setPasswordB}" == "1" ]; then passwordinfo = "${passwordinfo}, B" + echo "A1" fi +echo "B" if [ "${setPasswordC}" == "1" ]; then passwordinfo = "${passwordinfo}, C" + echo "B1" fi +echo "${passwordinfo}" +sleep 3 # if passwords are set in a migration situation, use different info text if [ "${migrationOS}" == "" ]; then - # info text on normal setup - dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. + # info text on normal setup + dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. Referenced as password A, B & C. PASSWORD A) Main User Password (SSH & WebUI, sudo) @@ -41,8 +48,8 @@ Write them down & store them in a safe place. else - # info text on migration setup - dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + # info text on migration setup + dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) @@ -68,6 +75,7 @@ if [ "${setPasswordA}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordA=/d' $SETUPFILE echo "passwordA='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password A accepted.\n\nUse this password for future SSH or Web-Admin logins to your RaspiBlitz & for sudo commands." 11 35 fi @@ -78,6 +86,7 @@ if [ "${setPasswordB}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordB=/d' $SETUPFILE echo "passwordB='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password B accepted.\n\nUse this password as login for\nadditial Apps & API access." 10 34 fi @@ -88,6 +97,7 @@ if [ "${setPasswordC}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordC=/d' $SETUPFILE echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password C accepted.\n\nAlways use this password to \nunlock your Lightning Wallet." 10 34 fi From 95537e5360b477e0a5e9128d35a762dbc1a8dd83 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:51:34 +0200 Subject: [PATCH 090/293] fix string issue --- home.admin/setup.scripts/dialogPasswords.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 48f733a54..bd994a038 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -17,12 +17,12 @@ source $SETUPFILE passwordinfo="A" echo "A" if [ "${setPasswordB}" == "1" ]; then - passwordinfo = "${passwordinfo}, B" + passwordinfo="${passwordinfo}, B" echo "A1" fi echo "B" if [ "${setPasswordC}" == "1" ]; then - passwordinfo = "${passwordinfo}, C" + passwordinfo="${passwordinfo}, C" echo "B1" fi echo "${passwordinfo}" From efc430e691cf74672116a851fb0d6424e45ee3bc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:53:05 +0200 Subject: [PATCH 091/293] remove debugs --- home.admin/setup.scripts/dialogPasswords.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index bd994a038..1874f2028 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -20,13 +20,9 @@ if [ "${setPasswordB}" == "1" ]; then passwordinfo="${passwordinfo}, B" echo "A1" fi -echo "B" if [ "${setPasswordC}" == "1" ]; then passwordinfo="${passwordinfo}, C" - echo "B1" fi -echo "${passwordinfo}" -sleep 3 # if passwords are set in a migration situation, use different info text if [ "${migrationOS}" == "" ]; then From 57ed2d6f025df658be68343ab199bb80aeabe946 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:57:01 +0200 Subject: [PATCH 092/293] shutdown info --- home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index a158275cb..6957bf188 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -50,6 +50,8 @@ if [ "${migrationOS}" != "" ]; then # on cancel - shutdown system if [ "$?" != "0" ]; then + clear + echo "OK .. no changes done to your hard drive. Shutting down." sudo shutdown now exit 1 fi From 9d72acaa22a8b25cfb666bb28d012c61bee743cf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 19:04:00 +0200 Subject: [PATCH 093/293] sd card script --- home.admin/config.scripts/blitz.sdcard.sh | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 home.admin/config.scripts/blitz.sdcard.sh diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.sdcard.sh new file mode 100644 index 000000000..2f8b8ceff --- /dev/null +++ b/home.admin/config.scripts/blitz.sdcard.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# basic background on this feature +# see: https://github.com/rootzoll/raspiblitz/issues/936 + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 19:07:09 +0200 Subject: [PATCH 094/293] get action --- home.admin/config.scripts/blitz.sdcard.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.sdcard.sh index 2f8b8ceff..c3da37710 100644 --- a/home.admin/config.scripts/blitz.sdcard.sh +++ b/home.admin/config.scripts/blitz.sdcard.sh @@ -21,6 +21,12 @@ if [ "$EUID" -ne 0 ] exit 1 fi +# 1st PARAMETER: action +action=$1 + +######################### +# STATUS + # gather data on sd card minimumSizeByte=8192000000 rootPartition=$(sudo mount | grep " / " | cut -d " " -f 1 | cut -d "/" -f 3) @@ -46,6 +52,9 @@ if [ "${action}" == "status" ]; then exit 0 fi +########################### +# EXPAND FILE SYSTEM OF SD + if [ "${action}" == "fsexpand" ]; then echo "# starting expand of file system of sd card" From 1a6ecbd1f0cfccb6cb5c2a5fafbc637a7a7cc931 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 19:15:26 +0200 Subject: [PATCH 095/293] rename as bootdrive script --- .../config.scripts/{blitz.sdcard.sh => blitz.bootdrive.sh} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename home.admin/config.scripts/{blitz.sdcard.sh => blitz.bootdrive.sh} (98%) diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.bootdrive.sh similarity index 98% rename from home.admin/config.scripts/blitz.sdcard.sh rename to home.admin/config.scripts/blitz.bootdrive.sh index c3da37710..20185a9bb 100644 --- a/home.admin/config.scripts/blitz.sdcard.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -9,7 +9,7 @@ source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 19:59:20 +0200 Subject: [PATCH 096/293] bootdrive help --- home.admin/config.scripts/blitz.bootdrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 20185a9bb..81202be26 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 20:06:57 +0200 Subject: [PATCH 097/293] pipe output --- home.admin/config.scripts/blitz.bootdrive.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 81202be26..22a33f791 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -9,9 +9,9 @@ source /home/admin/raspiblitz.info &2 else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -74,7 +74,7 @@ if [ "${action}" == "fsexpand" ]; then resizeArmbian="/usr/lib/armbian/armbian-resize-filesystem" if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" - sudo $resizeArmbian start + sudo $resizeArmbian start 1>&2 else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From ccf230cd9f63ab2d5b7cb4f3f4715a38c4bce701 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 20:09:30 +0200 Subject: [PATCH 098/293] fix raspiblitz.info --- home.admin/config.scripts/blitz.bootdrive.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 22a33f791..1b9e0d811 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -57,14 +57,16 @@ fi if [ "${action}" == "fsexpand" ]; then + echo "# blitz.bootdrive.sh fsexpand" echo "# starting expand of file system of sd card" - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" ${infoFile} + sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then resizeRaspbian="/usr/bin/raspi-config" if [ -x ${resizeRaspbian} ]; then echo "# RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" sudo $resizeRaspbian --expand-rootfs 1>&2 + echo "# DONE" else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -75,6 +77,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" sudo $resizeArmbian start 1>&2 + echo "# DONE" else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From 1c35c7d2c8215d71da4a530203b68f9315c8e08b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 20:10:13 +0200 Subject: [PATCH 099/293] add rebot info --- home.admin/config.scripts/blitz.bootdrive.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 1b9e0d811..217510285 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -66,7 +66,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeRaspbian} ]; then echo "# RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" sudo $resizeRaspbian --expand-rootfs 1>&2 - echo "# DONE" + echo "# DONE - please reboot" else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -77,7 +77,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" sudo $resizeArmbian start 1>&2 - echo "# DONE" + echo "# DONE - please reboot" else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From 11c2159711953284ce3210192c1232a826503f75 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:04:53 +0200 Subject: [PATCH 100/293] move UASP to datadrive script --- home.admin/config.scripts/blitz.datadrive.sh | 40 +++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 140bc4ba4..f08ee1eb8 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then >&2 echo "# managing the data drive(s) with old EXT4 or new BTRFS" - >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot]" + >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot|uasp-fix]" echo "error='missing parameters'" exit 1 fi @@ -1672,5 +1672,43 @@ if [ "$1" = "clean" ]; then fi +######################################## +# UASP-fix +######################################## + +if [ "$1" = "uasp-fix" ]; then + + # get HDD status and if the connected adapter is supports UASP + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + + # check if UASP is already deactivated (on RaspiOS) + # https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/ + cmdlineExists=$(sudo ls /boot/cmdline.txt 2>/dev/null | grep -c "cmdline.txt") + if [ ${cmdlineExists} -eq 1 ] && [ ${#hddAdapterUSB} -gt 0 ] && [ ${hddAdapterUSAP} -eq 0 ]; then + echo "# Checking for UASP deactivation ..." + usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=") + usbQuirkDone=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=${hddAdapterUSB}:u") + if [ ${usbQuirkActive} -gt 0 ] && [ ${usbQuirkDone} -eq 0 ]; then + # remove old usb-storage.quirks + sudo sed -i "s/usb-storage.quirks=[^ ]* //g" /boot/cmdline.txt + fi + if [ ${usbQuirkDone} -eq 0 ]; then + # add new usb-storage.quirks + sudo sed -i "1s/^/usb-storage.quirks=${hddAdapterUSB}:u /" /boot/cmdline.txt + # go into reboot to activate new setting + echo "# DONE deactivating UASP for ${hddAdapterUSB} ... reboot needed" + echo "neededReboot=1" + else + echo "# Already UASP deactivated for ${hddAdapterUSB}" + echo "neededReboot=0" + fi + else + echo "# Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" + echo "neededReboot=0" + fi + + exit 0 +fi + echo "error='unkown command'" exit 1 From d4ddbe8e14219b4b7a225ba8a13876ad0fa91af4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:49:47 +0200 Subject: [PATCH 101/293] add configWifi --- home.admin/config.scripts/internet.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index abb5221f8..8631a3083 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -79,6 +79,10 @@ if [ "${localip:0:4}" = "169." ]; then dhcp=0 fi +############################################# +# check WifiConfig +configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=") + ############################################# # check for internet connection online=0 @@ -176,6 +180,7 @@ if [ "$1" == "status" ]; then echo "localip=${localip}" echo "dhcp=${dhcp}" echo "network_device=${networkDevice}" + echo "configWifiExists='${configWifiExists}'" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From c5266aad7b271ddf18636a57144ae143a0df35cd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:50:33 +0200 Subject: [PATCH 102/293] config wifi exists as number --- home.admin/config.scripts/internet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index 8631a3083..188ea4fcf 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -180,7 +180,7 @@ if [ "$1" == "status" ]; then echo "localip=${localip}" echo "dhcp=${dhcp}" echo "network_device=${networkDevice}" - echo "configWifiExists='${configWifiExists}'" + echo "configWifiExists=${configWifiExists}" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From 42054846de668d05b046ca6aa5a947d3e5d92eec Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:51:18 +0200 Subject: [PATCH 103/293] change order --- home.admin/config.scripts/internet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index 188ea4fcf..8f9651fa9 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -179,8 +179,8 @@ if [ "$1" == "status" ]; then echo "### LOCAL INTERNET ###" echo "localip=${localip}" echo "dhcp=${dhcp}" - echo "network_device=${networkDevice}" echo "configWifiExists=${configWifiExists}" + echo "network_device=${networkDevice}" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From 5f711cd01d7eec2faa54796e6870ab8c3745685f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:36:35 +0200 Subject: [PATCH 104/293] extend wifi restore to work with mem copy --- home.admin/config.scripts/internet.wifi.sh | 44 ++++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/home.admin/config.scripts/internet.wifi.sh b/home.admin/config.scripts/internet.wifi.sh index 4698be96e..4f00270d1 100755 --- a/home.admin/config.scripts/internet.wifi.sh +++ b/home.admin/config.scripts/internet.wifi.sh @@ -81,25 +81,45 @@ update_config=1" # or when WIFI is inactive but a wpa_supplicant.conf exists restore this elif [ "$1" == "backup-restore" ]; then - # check if HDD already exists + # check if HDD backup location is available (for backup or restore) + hddBackupLocationAvailable=0 if [ -d /mnt/hdd/app-data ]; then - echo "# running backup/restore wifi settings" - else - echo "error='no hdd'" - exit 1 + hddBackupLocationAvailable=1 fi + echo "hddBackupLocationAvailable=${hddBackupLocationAvailable}" + + hddRestoreConfigAvailable=$(sudo ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + echo "hddRestoreConfigAvailable=${hddRestoreConfigAvailable}" + + # check if mem copy of wifi config is available (for restore only) + # this should be available if a backup on HDD exists and HDD is not mounted yet but was inspected by datadrive script + memRestoreConfigAvailable=$(sudo ls /var/cache/raspiblitz/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + echo "memRestoreConfigAvailable=${memRestoreConfigAvailable}" - wifiBackUpExists=$() if [ ${wifiIsSet} -eq 1 ]; then - # BACKUP latest wifi settings to HDD - sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf - echo "wifiRestore=0" - echo "wifiBackup=1" + # BACKUP latest wifi settings to HDD if available + if [ ${hddBackupLocationAvailable} -eq 1 ]; then + sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf + echo "wifiRestore=0" + echo "wifiBackup=1" + else + echo "wifiRestore=0" + echo "wifiBackup=0" + fi exit 0 - elif [ -f /mnt/hdd/app-data/wpa_supplicant.conf ]; then + elif [ ${hddRestoreConfigAvailable} -eq 1 ]; then # RESTORE backuped wifi settings from HDD to RaspiBlitz sudo cp /mnt/hdd/app-data/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf - echo "# restoring old wifi settings ... wait 4 secounds to connect" + echo "# restoring old wifi settings from HDD ... wait 4 secounds to connect" + sudo wpa_cli -i wlan0 reconfigure 1>/dev/null + sleep 4 + echo "wifiRestore=1" + echo "wifiBackup=0" + exit 0 + elif [ ${hddRestoreConfigAvailable} -eq 1 ]; then + # RESTORE backuped wifi settings from MEMCOPY to RaspiBlitz + sudo cp /var/cache/raspiblitz/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf + echo "# restoring old wifi settings from MEMCOPY ... wait 4 secounds to connect" sudo wpa_cli -i wlan0 reconfigure 1>/dev/null sleep 4 echo "wifiRestore=1" From 9ed9215d24cc00529c5739da78da7de518f8ffce Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:40:18 +0200 Subject: [PATCH 105/293] print wifi state --- home.admin/config.scripts/internet.wifi.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/config.scripts/internet.wifi.sh b/home.admin/config.scripts/internet.wifi.sh index 4f00270d1..c0fb58a2f 100755 --- a/home.admin/config.scripts/internet.wifi.sh +++ b/home.admin/config.scripts/internet.wifi.sh @@ -81,6 +81,9 @@ update_config=1" # or when WIFI is inactive but a wpa_supplicant.conf exists restore this elif [ "$1" == "backup-restore" ]; then + # print wifi state + echo "wifiIsSet=${wifiIsSet}" + # check if HDD backup location is available (for backup or restore) hddBackupLocationAvailable=0 if [ -d /mnt/hdd/app-data ]; then From 9ded756d5fa5d661e70d935c2faf7be2f8f1a829 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:53:34 +0200 Subject: [PATCH 106/293] make mem copy of wifi config on inspect unmounted --- home.admin/config.scripts/blitz.datadrive.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index f08ee1eb8..239944ce9 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -71,7 +71,7 @@ if [ "$1" = "status" ]; then echo "isMounted=${isMounted}" echo "isBTRFS=${isBTRFS}" - # if HDD is not mounted system is in the pre-setup phase + # if HDD is not mounted system then it is in the pre-setup phase # deliver all the detailes needed about the data drive # and it content for the setup dialogs if [ ${isMounted} -eq 0 ]; then @@ -268,6 +268,14 @@ if [ "$1" = "status" ]; then fi echo "hddGotMigrationData='${hddGotMigrationData}'" + # check if there is a wifi configuration as backup + wifiBackupConfigExists=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + if [ ${wifiBackupConfigExists} -eq 1 ]; then + # make a copy to the mem cache drive (so that Wifi can be connected before setup & final HDD mount) + sudo cp /mnt/hdd/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf + echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" + fi + # unmount sudo umount /mnt/storage fi From e05f91f0d46907a591723d73166eec9d75aef929 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:54:37 +0200 Subject: [PATCH 107/293] code cleanup --- home.admin/_bootstrap.provision.sh | 8 +------- home.admin/config.scripts/blitz.setpassword.sh | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_bootstrap.provision.sh index 7a380e8c5..1c8ae39cb 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_bootstrap.provision.sh @@ -392,13 +392,7 @@ if [ "${BTCPayServer}" = "on" ]; then echo "Provisioning BTCPAYSERVER on TOR - running setup" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup BTCPay (takes time)'/g" ${infoFile} sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on >> ${logFile} 2>&1 - - #echo "Provisioning BTCPAYSERVER on TOR - run on after bootup script" >> ${logFile} - # because BTCPAY server freezes during recovery .. it will get installed after reboot - #echo "sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on" >> /home/admin/setup.sh - #sudo chmod +x /home/admin/setup.sh >> ${logFile} - #sudo ls -la /home/admin/setup.sh >> ${logFile} - + else echo "Provisioning BTCPayServer - keep default" >> ${logFile} fi diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 9f43fa998..db7bd3f82 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -4,7 +4,7 @@ if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "small config script to set a passwords A,B,C & D" echo "blitz.setpassword.sh a [?newpassword] " -echo "blitz.setpassword.sh b [?newpassword] " + echo "blitz.setpassword.sh b [?newpassword] " echo "blitz.setpassword.sh c [?oldpassword] [?newpassword] " echo "or just as a password enter dialog (result as file)" echo "blitz.setpassword.sh [x] [text] [result-file] [?empty-allowed]" From 2f06a55484b059f8ec105dc5fe04f0c702ce51c4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:54:55 +0200 Subject: [PATCH 108/293] refector system-init on boostrap --- home.admin/_bootstrap.sh | 372 ++++++++++++++++++++------------------- 1 file changed, 188 insertions(+), 184 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index f12134300..f69bf30fc 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -26,37 +26,7 @@ logFile="/home/admin/raspiblitz.log" # used by display and later setup steps infoFile="/home/admin/raspiblitz.info" - -# FUNCTIONS to be used later on in the script - -# wait until raspberry pi gets a local IP -function wait_for_local_network() { - gotLocalIP=0 - until [ ${gotLocalIP} -eq 1 ] - do - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | egrep -i '(*[eth|ens|enp|eno|wlan|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') - if [ ${#localip} -eq 0 ]; then - configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=") - if [ ${configWifiExists} -eq 0 ]; then - # display user to connect LAN - sed -i "s/^state=.*/state=noIP/g" ${infoFile} - sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} - else - # display user that wifi settings are not working - sed -i "s/^state=.*/state=noIP/g" ${infoFile} - sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} - fi - elif [ "${localip:0:4}" = "169." ]; then - # display user waiting for DHCP - sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} - sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} - else - gotLocalIP=1 - fi - sleep 1 - done -} - +# Init boostrap log file echo "Writing logs to: ${logFile}" echo "" > $logFile echo "***********************************************" >> $logFile @@ -74,6 +44,10 @@ displayClass="lcd" displayType="" fundRecovery=0 +################################ +# INIT raspiblitz.info +################################ + # try to load old values if available (overwrites defaults) source ${infoFile} 2>/dev/null @@ -98,6 +72,119 @@ if [ "${setupStep}" != "100" ]; then fi sudo chmod 777 ${infoFile} +###################################### +# SECTION FOR POSSIBLE REBOOT ACTIONS +systemInitReboot=0 + +################################ +# FORCED SWITCH TO HDMI +# if a file called 'hdmi' gets +# placed onto the boot part of +# the sd card - switch to hdmi +################################ + +forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) +if [ ${forceHDMIoutput} -eq 1 ]; then + # delete that file (to prevent loop) + sudo rm /boot/hdmi* + # switch to HDMI what will trigger reboot + echo "HDMI switch found ... activating HDMI display output & reboot" >> $logFile + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile + systemInitReboot=1 +else + echo "No HDMI switch found. " >> $logFile +fi + +################################ +# SSH SERVER CERTS RESET +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ + +sshReset=$(sudo ls /boot/ssh.reset* 2>/dev/null | grep -c reset) +if [ ${sshReset} -eq 1 ]; then + # delete that file (to prevent loop) + sudo rm /boot/ssh.reset* >> $logFile + # delete ssh certs + echo "SSHRESET switch found ... stopping SSH and deleting old certs" >> $logFile + sudo systemctl stop sshd >> $logFile + sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile + sudo ssh-keygen -A >> $logFile + systemInitReboot=1 +else + echo "No SSHRESET switch found. " >> $logFile +fi + +################################ +# FS EXPAND +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ +source <(sudo /home/admin/config.scripts/blitz.bootdrive.sh status) +if [ "${needsExpansion}" == "1" ] && [ "${fsexpanded}" == "0" ]; then + echo "FSEXPAND needed ... starting process" >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh status >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh fsexpand >> $logFile + systemInitReboot=1 +else + echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile +fi + +################################ +# UASP FIX - first try +# if HDD is connected on start +################################ +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) +if [ "${neededReboot}" == "1" ]; then + echo "UASP FIX applied (1st-try) ... reboot needed." >> $logFile + systemInitReboot=1 +else + echo "No UASP FIX needed (1st-try)." >> $logFile +fi + +###################################### +# CHECK IF REBOOT IS NEEDED +# from actions above + +if [ "${systemInitReboot}" == "1" ]; then + sudo cp ${logFile} ${logFile}.systeminit + sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} + sudo shutdown -r now + sleep 100 + exit 0 +fi + +################################ +# BOOT LOGO +################################ + +# display 3 secs logo - try to kickstart LCD +# see https://github.com/rootzoll/raspiblitz/issues/195#issuecomment-469918692 +# see https://github.com/rootzoll/raspiblitz/issues/647 +# see https://github.com/rootzoll/raspiblitz/pull/1580 +randnum=$(shuf -i 0-7 -n 1) +/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/startlogo${randnum}.png +sleep 5 +/home/admin/config.scripts/blitz.display.sh hide + +################################ +# GENERATE UNIQUE SSH PUB KEYS +# on first boot up +################################ + +numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') +if [ ${numberOfPubKeys} -eq 0 ]; then + echo "*** Generating new SSH PubKeys" >> $logFile + sudo dpkg-reconfigure openssh-server + echo "OK" >> $logFile +fi + +################################ +# CLEANING BOOT SYSTEM +################################ + # resetting start count files echo "SYSTEMD RESTART LOG: blockchain (bitcoind/litecoind)" > /home/admin/systemd.blockchain.log echo "SYSTEMD RESTART LOG: lightning (LND)" > /home/admin/systemd.lightning.log @@ -129,127 +216,15 @@ fi echo "" ############################### -# RAID data check (BRTFS) -############################### -# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 +# WAIT FOR ALL SERVICES +# get the state of data drive source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ ${isRaid} -eq 1 ]; then - echo "TRIGGERING BTRFS RAID DATA CHECK ..." - echo "Check status with: sudo btrfs scrub status /mnt/hdd/" - sudo btrfs scrub start /mnt/hdd/ -fi ################################ -# BOOT LOGO +# WAIT LOOP UNTIL HDD CONNECTED ################################ -# display 3 secs logo - try to kickstart LCD -# see https://github.com/rootzoll/raspiblitz/issues/195#issuecomment-469918692 -# see https://github.com/rootzoll/raspiblitz/issues/647 -# see https://github.com/rootzoll/raspiblitz/pull/1580 -randnum=$(shuf -i 0-7 -n 1) -/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/startlogo${randnum}.png -sleep 5 -/home/admin/config.scripts/blitz.display.sh hide - -################################ -# GENERATE UNIQUE SSH PUB KEYS -# on first boot up -################################ - -numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') -if [ ${numberOfPubKeys} -eq 0 ]; then - echo "*** Generating new SSH PubKeys" >> $logFile - sudo dpkg-reconfigure openssh-server - echo "OK" >> $logFile -fi - -################################ -# AFTER BOOT SCRIPT -# when a process needs to -# execute stuff after a reboot -# it should in file -# /home/admin/setup.sh -################################ - -# check for after boot script -afterSetupScriptExists=$(ls /home/admin/setup.sh 2>/dev/null | grep -c setup.sh) -if [ ${afterSetupScriptExists} -eq 1 ]; then - echo "*** SETUP SCRIPT DETECTED ***" - # LCD info - sudo sed -i "s/^state=.*/state=recovering/g" ${infoFile} - sudo sed -i "s/^message=.*/message='After Boot Setup (takes time)'/g" ${infoFile} - # echo out script to journal logs - sudo cat /home/admin/setup.sh - # execute the after boot script - echo "Logs in stored to: /home/admin/raspiblitz.log.recover" - echo "\n***** RUNNING AFTER BOOT SCRIPT ******** " >> ${logFile} - sudo /home/admin/setup.sh >> ${logFile} - # delete the after boot script - sudo rm /home/admin/setup.sh - # reboot again - echo "DONE wait 10 secs ... one more reboot needed ... " >> ${logFile} - sudo cp ${logFile} ${logFile}.afterboot - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# FORCED SWITCH TO HDMI -# if a file called 'hdmi' gets -# placed onto the boot part of -# the sd card - switch to hdmi -################################ - -forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) -if [ ${forceHDMIoutput} -eq 1 ]; then - # delete that file (to prevent loop) - sudo rm /boot/hdmi* - # switch to HDMI what will trigger reboot - echo "Yes HDMI switch found ... activating HDMI display output & reboot" >> $logFile - sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile - sudo cp ${logFile} ${logFile}.hdmiswitch - sudo shutdown -r now - sleep 100 - exit 0 -else - echo "No HDMI switch found. " >> $logFile -fi - -################################ -# SSH SERVER CERTS RESET -# if a file called 'ssh.reset' gets -# placed onto the boot part of -# the sd card - delete old ssh data -################################ - -sshReset=$(sudo ls /boot/ssh.reset* 2>/dev/null | grep -c reset) -if [ ${sshReset} -eq 1 ]; then - # delete that file (to prevent loop) - sudo rm /boot/ssh.reset* >> $logFile - # show info ssh reset - sed -i "s/^state=.*/state=sshreset/g" ${infoFile} - sed -i "s/^message=.*/message='resetting SSH & reboot'/g" ${infoFile} - # delete ssh certs - sudo systemctl stop sshd >> $logFile - sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile - sudo ssh-keygen -A >> $logFile - echo "SSH SERVER CERTS RESET ... (reboot) " >> $logFile - sudo cp ${logFile} ${logFile}.sshcerts - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# HDD CHECK & PRE-INIT -################################ - -# Without LCD message needs to be printed -# wait loop until HDD is connected -echo "" until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] do source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) @@ -264,40 +239,70 @@ do sleep 2 done +#################################### +# WIFI RESTORE from HDD works with +# mem copy from datadrive inspection +#################################### + +# check if there is a WIFI configuration to backup or restore +/home/admin/config.scripts/internet.wifi.sh backup-restore >> $logFile + +################################ +# UASP FIX - second try +# when HDD gets connected later +################################ +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) +if [ "${neededReboot}" == "1" ]; then + echo "UASP FIX applied (2st-try) ... reboot needed." >> $logFile + sudo cp ${logFile} ${logFile}.uasp + sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} + sudo shutdown -r now + sleep 100 + exit 0 +else + echo "No UASP FIX needed (2st-try)." >> $logFile +fi + +gotLocalIP=0 +until [ ${gotLocalIP} -eq 1 ] +do + source <(/home/admin/config.scripts/internet.sh status) + if [ ${dhcp} -eq 0 ]; then + # display user waiting for DHCP + sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} + sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} + elif [ ${#localip} -eq 0 ]; then + if [ ${configWifiExists} -eq 0 ]; then + # display user to connect LAN + sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} + else + # display user that wifi settings are not working + sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} + fi + elif [ ${online} -eq 0 ]; then + # display user that wifi settings are not working + sed -i "s/^state=.*/state=noInternet/g" ${infoFile} + sed -i "s/^message=.*/message='No connection to Internet'/g" ${infoFile} + else + gotLocalIP=1 + fi + sleep 1 +done + # write info for LCD sed -i "s/^state=.*/state=booting/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} +# TODO: REMOVE LATER AGAIN +echo "DEBUG EXIT BREAK" >> $logFile +exit 1 + # get fresh info about data drive to continue source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) echo "isMounted: $isMounted" >> $logFile -# check if UASP is already deactivated (on RaspiOS) -# https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/ -cmdlineExists=$(sudo ls /boot/cmdline.txt 2>/dev/null | grep -c "cmdline.txt") -if [ ${cmdlineExists} -eq 1 ] && [ ${#hddAdapterUSB} -gt 0 ] && [ ${hddAdapterUSAP} -eq 0 ]; then - echo "Checking for UASP deactivation ..." >> $logFile - usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=") - # check if its maybe other device - usbQuirkDone=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=${hddAdapterUSB}:u") - if [ ${usbQuirkActive} -gt 0 ] && [ ${usbQuirkDone} -eq 0 ]; then - # remove old usb-storage.quirks - sudo sed -i "s/usb-storage.quirks=[^ ]* //g" /boot/cmdline.txt - fi - if [ ${usbQuirkDone} -eq 0 ]; then - # add new usb-storage.quirks - sudo sed -i "1s/^/usb-storage.quirks=${hddAdapterUSB}:u /" /boot/cmdline.txt - sudo cat /boot/cmdline.txt >> $logFile - # go into reboot to activate new setting - echo "DONE deactivating UASP for ${hddAdapterUSB} ... one more reboot needed ... " >> $logFile - sudo cp ${logFile} ${logFile}.uasp - sudo shutdown -r now - sleep 100 - fi -else - echo "Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" >> $logFile -fi - # check if the HDD is auto-mounted ( auto-mounted = setup-done) if [ ${isMounted} -eq 0 ]; then @@ -337,15 +342,6 @@ if [ ${isMounted} -eq 0 ]; then echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link - # check if there is a WIFI configuration to backup or restore - sudo /home/admin/config.scripts/internet.wifi.sh backup-restore - - # make sure at this point local network is connected - wait_for_local_network - - # make sure before update/recovery that a internet connection is working - wait_for_local_internet - # check if HDD contains already a configuration configExists=$(ls ${configFile} | grep -c '.conf') echo "HDD contains already a configuration: ${configExists}" >> $logFile @@ -411,9 +407,6 @@ if [ ${isMounted} -eq 0 ]; then fi # END - no automount - after this HDD is mounted -# make sure at this point local network is connected -wait_for_local_network - # if a WIFI config exists backup to HDD configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=") if [ ${configWifiExists} -eq 1 ]; then @@ -592,6 +585,17 @@ else echo "OK: Temp cleaned" >> $logFile fi +############################### +# RAID data check (BRTFS) +############################### +# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 + +if [ ${isRaid} -eq 1 ]; then + echo "TRIGGERING BTRFS RAID DATA CHECK ..." + echo "Check status with: sudo btrfs scrub status /mnt/hdd/" + sudo btrfs scrub start /mnt/hdd/ +fi + ###################################### # PREPARE SUBSCRIPTIONS DATA DIRECTORY ###################################### From 80bf1bc06437f95a7055d7ab87515ec894ad6f0a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:05:31 +0200 Subject: [PATCH 109/293] remove online checks from display loop --- home.admin/00infoLCD.sh | 59 +++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index d3a711f24..2dc2c1c97 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -82,29 +82,6 @@ while : # CHECK BASIC DATA ########################### - # get the local network IP to be displayed on the lCD - source <(sudo /home/admin/config.scripts/internet.sh status) - - # waiting for IP in general - if [ ${#localip} -eq 0 ]; then - l1="Waiting for Network ...\n" - l2="Not able to get local IP.\n" - l3="LAN cable connected? WIFI lost?\n" - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "$l1$l2$l3" 5 40 - sleep 3 - continue - fi - - # waiting for Internet connection - if [ ${online} -eq 0 ]; then - l1="Waiting for Internet ...\n" - l2="Local Network seems OK but no Internet.\n" - l3="Is router still online?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - continue - fi - # get config info if already available (with state value) source ${infoFile} configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') @@ -136,6 +113,26 @@ while : continue fi + # waiting for DHCP in general + if [ "${state}" = "noIP" ]; then + l1="Waiting for Network ...\n" + l2="Not able to get local IP.\n" + l3="LAN cable connected? WIFI lost?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + + # waiting for DHCP in general + if [ "${state}" = "noInternet" ]; then + l1="Waiting for Internet ...\n" + l2="Local Network seems OK but no Internet.\n" + l3="Is router still online?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # if no information available from files - set default if [ ${#setupStep} -eq 0 ]; then setupStep=0 @@ -144,22 +141,8 @@ while : # before setup even started if [ ${setupStep} -eq 0 ]; then - # check for internet connection - online=$(ping 1.0.0.1 -c 1 -W 2 | grep -c '1 received') - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 8.8.8.8 -c 1 -W 2 | grep -c '1 received') - fi - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 208.67.222.222 -c 1 -W 2 | grep -c '1 received') - fi - - if [ ${online} -eq 0 ]; then - message="no internet connection" - # when in presync - get more info on progress - elif [ "${state}" = "presync" ]; then + if [ "${state}" = "presync" ]; then blockchaininfo="$(sudo -u root bitcoin-cli --conf=/home/admin/assets/bitcoin.conf getblockchaininfo 2>/dev/null)" message="starting" if [ ${#blockchaininfo} -gt 0 ]; then From aefbdf42491fb6b8c1ffe063afee31fb80c2cfe1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:05:50 +0200 Subject: [PATCH 110/293] add localip raspiblitz.info --- home.admin/_background.sh | 2 ++ home.admin/_bootstrap.sh | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index d07346459..02e798f71 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: check & update localip in raspiblitz info for display + # This script runs on after start in background # as a service and gets restarted on failure # it runs ALMOST every seconds diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index f69bf30fc..9a44c9ecc 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -54,6 +54,9 @@ source ${infoFile} 2>/dev/null # try to load config values if available (config overwrites info) source ${configFile} 2>/dev/null +# get first basic network info +source <(/home/admin/config.scripts/internet.sh status) + # resetting info file echo "Resetting the InfoFile: ${infoFile}" echo "state=starting" > $infoFile @@ -62,6 +65,8 @@ echo "baseimage=${baseimage}" >> $infoFile echo "cpu=${cpu}" >> $infoFile echo "network=${network}" >> $infoFile echo "chain=${chain}" >> $infoFile +echo "localip='${localip}'" >> $infoFile +echo "online='${online}'" >> $infoFile echo "fsexpanded=${fsexpanded}" >> $infoFile echo "displayClass=${displayClass}" >> $infoFile echo "displayType=${displayType}" >> $infoFile @@ -222,7 +227,7 @@ echo "" source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) ################################ -# WAIT LOOP UNTIL HDD CONNECTED +# WAIT LOOP: HDD CONNECTED ################################ until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] @@ -263,10 +268,22 @@ else echo "No UASP FIX needed (2st-try)." >> $logFile fi +################################### +# WAIT LOOP: LOCALNET / INTERNET +# after HDD > can contain WIFI conf +################################### + gotLocalIP=0 until [ ${gotLocalIP} -eq 1 ] do + + # get latest network info source <(/home/admin/config.scripts/internet.sh status) + + # update localip in raspiblitz.info + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # check state of network if [ ${dhcp} -eq 0 ]; then # display user waiting for DHCP sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} From 70085229882c9e3edf32c6ef1c17e0b051eb7b9f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:06:23 +0200 Subject: [PATCH 111/293] todo info --- home.admin/_background.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index 02e798f71..32b46fc25 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,6 +1,6 @@ #!/bin/bash -# TODO: check & update localip in raspiblitz info for display +# TODO: check & update localip in raspiblitz info for display (only write on change) # This script runs on after start in background # as a service and gets restarted on failure From 6d3b0ac5c53850b15d32f56e912c7f9aac35ad1b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:35:48 +0200 Subject: [PATCH 112/293] detect too small sd card --- home.admin/00infoLCD.sh | 38 ++++++++++++++++++++++++++++++-------- home.admin/_bootstrap.sh | 10 ++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 2dc2c1c97..51b938a7e 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -103,6 +103,16 @@ while : continue fi + # waiting for DHCP in general + if [ "${state}" = "noHDD" ]; then + l1="Waiting for HDD/SSD ...\n" + l2="Please connect a >500GB\n" + l3="HDD or SSD to the device.\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # waiting for DHCP in general if [ "${state}" = "noDHCP" ]; then l1="Waiting for DHCP ...\n" @@ -133,6 +143,26 @@ while : continue fi + # waiting for Intrenet + if [ "${state}" = "noInternet" ]; then + l1="Waiting for Internet ...\n" + l2="Local Network seems OK but no Internet.\n" + l3="Is router still online?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + + # waiting for DHCP in general + if [ "${state}" = "sdtoosmall" ]; then + l1="SD card is too small.\n" + l2="Please use 16GB or bigger.\n" + l3="Its safe to cut power now.\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # if no information available from files - set default if [ ${#setupStep} -eq 0 ]; then setupStep=0 @@ -149,14 +179,6 @@ while : message="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')" message=$(echo $message | awk '{printf( "%.2f%%", 100 * $1)}') fi - - # when old data - improve message - elif [ "${state}" = "sdtoosmall" ]; then - message="SDCARD TOO SMALL - min 16GB" - - # when no HDD - improve message - elif [ "${state}" = "noHDD" ]; then - message="Connect external HDD/SSD" fi # setup process has not started yet diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 9a44c9ecc..c15a2fd21 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -133,6 +133,16 @@ if [ "${needsExpansion}" == "1" ] && [ "${fsexpanded}" == "0" ]; then sudo /home/admin/config.scripts/blitz.bootdrive.sh status >> $logFile sudo /home/admin/config.scripts/blitz.bootdrive.sh fsexpand >> $logFile systemInitReboot=1 +elif [ "${tooSmall}" == "1" ]; then + echo "!!! FAIL !!!!!!!!!!!!!!!!!!!!" >> $logFile + echo "SDCARD TOO SMALL 16G minimum" >> $logFile + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> $logFile + sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile} + echo "System stopped. Please cut power." >> $logFile + sleep 6000 + sudo shutdown -r now + slepp 100 + exit 1 else echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile fi From 84d176ede4f4a398a080d38e13ea81545809d7d1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:44:03 +0200 Subject: [PATCH 113/293] optimize HDD wait loop --- home.admin/_bootstrap.sh | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index c15a2fd21..3dfde0bad 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -240,19 +240,27 @@ source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) # WAIT LOOP: HDD CONNECTED ################################ +echo "Waiting for HDD/SSD ..." >> $logFile until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] do + + # recheck HDD/SSD source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - echo "isMounted: $isMounted" >> $logFile - echo "hddCandidate: $hddCandidate" >> $logFile - message="Connect the Hard Drive" - echo $message + echo "isMounted: $isMounted" + echo "hddCandidate: $hddCandidate" if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} - sed -i "s/^message=.*/message='$message'/g" ${infoFile} fi + + # get latest network info & update raspiblitz.info + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # wait for next check sleep 2 + done +echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile #################################### # WIFI RESTORE from HDD works with @@ -287,10 +295,8 @@ gotLocalIP=0 until [ ${gotLocalIP} -eq 1 ] do - # get latest network info + # get latest network info & update raspiblitz.info source <(/home/admin/config.scripts/internet.sh status) - - # update localip in raspiblitz.info sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} # check state of network From 6adff7c8135ddce58fb3dba6c79b73be3a1bb06c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:51:22 +0200 Subject: [PATCH 114/293] display no network --- home.admin/00infoLCD.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 51b938a7e..acee39fda 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -103,6 +103,9 @@ while : continue fi + # make sure no local ip is readable + if [ "${localip}" == "" ]; then localip="no-network"; fi + # waiting for DHCP in general if [ "${state}" = "noHDD" ]; then l1="Waiting for HDD/SSD ...\n" From 6f7577541f2774ac75a2c34b223c4bca2ed3d300 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:18:55 +0200 Subject: [PATCH 115/293] debug datadrive --- home.admin/config.scripts/blitz.datadrive.sh | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 239944ce9..396724cfe 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -79,10 +79,10 @@ if [ "$1" = "status" ]; then echo "# SETUP INFO" # find the HDD (biggest single partition) + # will then be used to offer formatting and permanent mounting hdd="" sizeDataPartition=0 OSPartition=$(sudo df /usr | grep dev | cut -d " " -f 1 | sed "s/\/dev\///g") - lsblk -o NAME,SIZE -b | grep -P "[s|v]d[a-z][0-9]?" > .lsblk.tmp while read line; do @@ -141,14 +141,17 @@ if [ "$1" = "status" ]; then done < .lsblk.tmp rm -f .lsblk.tmp 1>/dev/null 2>/dev/null + # display possible warnings from hdd partition detection if [ "${hddPartitionCandidate}" != "" ] && [ ${#hddDataPartition} -lt 4 ]; then echo "# WARNING: found invalid partition (${hddDataPartition}) - redacting" hddDataPartition="" fi + # try to detect if its an SSD isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0) echo "isSSD=${isSSD}" + # display results from hdd & partition detection echo "hddCandidate='${hdd}'" hddBytes=0 hddGigaBytes=0 @@ -158,9 +161,9 @@ if [ "$1" = "status" ]; then fi echo "hddBytes=${hddBytes}" echo "hddGigaBytes=${hddGigaBytes}" - echo "hddPartitionCandidate='${hddDataPartition}'" + # if positive deliver more data if [ ${#hddDataPartition} -gt 0 ]; then # check partition size in bytes and GBs @@ -168,13 +171,6 @@ if [ "$1" = "status" ]; then hddDataPartitionGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l) echo "hddPartitionGigaBytes=${hddDataPartitionGigaBytes}" - # check if single drive with that size - hddCount=0 - if [ ${#hddDataPartition} -gt 0 ]; then - hddCount=1 - fi - echo "hddCount=${hddCount}" - # check format of devices partition hddFormat=$(lsblk -o FSTYPE,NAME,TYPE | grep part | grep "${hddDataPartition}" | cut -d " " -f 1) echo "hddFormat='${hddFormat}'" @@ -182,7 +178,7 @@ if [ "$1" = "status" ]; then # if 'ext4' or 'btrfs' then temp mount and investigate content if [ "${hddFormat}" = "ext4" ] || [ "${hddFormat}" = "btrfs" ]; then - # BTRFS is working with subvolumnes for snapshots / ext4 has no SubVolumes + # BTRFS is working with subvolumes for snapshots / ext4 has no SubVolumes subVolumeDir="" if [ "${hddFormat}" = "btrfs" ]; then subVolumeDir="/WORKINGDIR" @@ -228,6 +224,12 @@ if [ "$1" = "status" ]; then echo "hddError='storage mount failed'" else + ############################### + # Pre-Setup Invetigation of HDD + + # DEBUG remove later + df + # check for blockchain data on storage hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat') echo "hddBlocksBitcoin=${hddBlocksBitcoin}" @@ -252,7 +254,7 @@ if [ "$1" = "status" ]; then echo "hddDataFreeKB=${hdd_data_free1Kblocks}" # check if its another fullnode implementation data disk - hddGotMigrationData="none" + hddGotMigrationData="''" if [ "${hddFormat}" = "ext4" ]; then # check for umbrel isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') @@ -269,8 +271,8 @@ if [ "$1" = "status" ]; then echo "hddGotMigrationData='${hddGotMigrationData}'" # check if there is a wifi configuration as backup - wifiBackupConfigExists=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") - if [ ${wifiBackupConfigExists} -eq 1 ]; then + hddGotWifiConf=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + if [ ${hddGotWifiConf} -eq 1 ]; then # make a copy to the mem cache drive (so that Wifi can be connected before setup & final HDD mount) sudo cp /mnt/hdd/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" @@ -354,6 +356,7 @@ if [ "$1" = "status" ]; then fi # HDD Adpater UASP support --> https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/ + # in both cases (if mounted or not - using the hdd selection from both cases) if [ ${#hdd} -gt 0 ]; then # determine USB HDD adapter model ID From cd23d59c5b823d0662e9247cebd07edca6529ded Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:28:42 +0200 Subject: [PATCH 116/293] added debug --- home.admin/config.scripts/blitz.datadrive.sh | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 396724cfe..14c56c8b8 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -202,11 +202,18 @@ if [ "$1" = "status" ]; then echo "hddError='data mount failed'" else - # check for recoverable RaspiBlitz data (if config file exists) and raid - hddRaspiData=$(sudo ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf) - isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") - echo "hddRaspiData=${hddRaspiData}" - sudo umount /mnt/hdd + ##################################### + # Pre-Setup Invetigation of DATA-PART + + # DEBUG remove later + df + + # check for recoverable RaspiBlitz data (if config file exists) and raid + hddRaspiData=$(sudo ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf) + isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") + echo "hddRaspiData=${hddRaspiData}" + + # sudo umount /mnt/hdd fi # temp storage data drive @@ -224,8 +231,8 @@ if [ "$1" = "status" ]; then echo "hddError='storage mount failed'" else - ############################### - # Pre-Setup Invetigation of HDD + ######################################## + # Pre-Setup Invetigation of STORAGE-PART # DEBUG remove later df @@ -279,7 +286,7 @@ if [ "$1" = "status" ]; then fi # unmount - sudo umount /mnt/storage + # sudo umount /mnt/storage fi else # if not ext4 or btrfs - there is no usable data From 5e3691a251b4af3bd7fd8dfb12e9a842c469b9ae Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:37:23 +0200 Subject: [PATCH 117/293] remove debug lines --- home.admin/config.scripts/blitz.datadrive.sh | 35 ++++++++++---------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 14c56c8b8..34428e84a 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -205,15 +205,27 @@ if [ "$1" = "status" ]; then ##################################### # Pre-Setup Invetigation of DATA-PART - # DEBUG remove later - df - # check for recoverable RaspiBlitz data (if config file exists) and raid hddRaspiData=$(sudo ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf) isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") echo "hddRaspiData=${hddRaspiData}" + hddRaspiVersion="" + if [ ${hddRaspiData} -eq 1 ]; then + source /mnt/hdd${subVolumeDir}/raspiblitz.conf + hddRaspiVersion="${raspiBlitzVersion}" + fi + echo "hddRaspiVersion=${hddRaspiVersion}" - # sudo umount /mnt/hdd + # check if there is a wifi configuration as backup + hddGotWifiConf=$(ls /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + if [ ${hddGotWifiConf} -eq 1 ]; then + # make a copy to the mem cache drive (so that Wifi can be connected before setup & final HDD mount) + sudo cp /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf + echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" + fi + + # comment this line out if case to study the contect of the data section + sudo umount /mnt/hdd fi # temp storage data drive @@ -234,9 +246,6 @@ if [ "$1" = "status" ]; then ######################################## # Pre-Setup Invetigation of STORAGE-PART - # DEBUG remove later - df - # check for blockchain data on storage hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat') echo "hddBlocksBitcoin=${hddBlocksBitcoin}" @@ -277,16 +286,8 @@ if [ "$1" = "status" ]; then fi echo "hddGotMigrationData='${hddGotMigrationData}'" - # check if there is a wifi configuration as backup - hddGotWifiConf=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") - if [ ${hddGotWifiConf} -eq 1 ]; then - # make a copy to the mem cache drive (so that Wifi can be connected before setup & final HDD mount) - sudo cp /mnt/hdd/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf - echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" - fi - - # unmount - # sudo umount /mnt/storage + # comment this line out if case to study the contect of the storage section + sudo umount /mnt/storage fi else # if not ext4 or btrfs - there is no usable data From d1a4a37fb33d31bc439d42133572f941d087f471 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:38:16 +0200 Subject: [PATCH 118/293] quote version string --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 34428e84a..e67fe3c98 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -214,7 +214,7 @@ if [ "$1" = "status" ]; then source /mnt/hdd${subVolumeDir}/raspiblitz.conf hddRaspiVersion="${raspiBlitzVersion}" fi - echo "hddRaspiVersion=${hddRaspiVersion}" + echo "hddRaspiVersion='${hddRaspiVersion}'" # check if there is a wifi configuration as backup hddGotWifiConf=$(ls /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") From 815e0972a1e5e27cd5bc133b0da5149d79bc52fb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:39:03 +0200 Subject: [PATCH 119/293] fix migration data default --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index e67fe3c98..43fa958e2 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -270,7 +270,7 @@ if [ "$1" = "status" ]; then echo "hddDataFreeKB=${hdd_data_free1Kblocks}" # check if its another fullnode implementation data disk - hddGotMigrationData="''" + hddGotMigrationData="" if [ "${hddFormat}" = "ext4" ]; then # check for umbrel isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') From 351a7020d41076061f758073435f099cb54bc742 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 15:24:38 +0200 Subject: [PATCH 120/293] user setup wait loop --- home.admin/00infoLCD.sh | 6 +++- home.admin/_bootstrap.sh | 62 ++++++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index acee39fda..68028b435 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -189,10 +189,14 @@ while : l2="ssh admin@${localip}\n" l3="Use password: raspiblitz\n" + if [ "${state}" = "errorHDD" ]; then + l1="HDD Error: ${message}\n" + fi + if [ "${state}" = "recovering" ]; then l1="Recovering please wait ..\n" fi - + boxwidth=$((${#localip} + 24)) sleep 3 dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) - ${message}" --infobox "$l1$l2$l3" 5 ${boxwidth} diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 3dfde0bad..b75d9f59a 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -248,11 +248,17 @@ do source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) echo "isMounted: $isMounted" echo "hddCandidate: $hddCandidate" - if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then + + # in case of HDD analyse ERROR + if [ ${#hddError} -gt 0 ]; then + echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile + sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} + sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} + elif [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} fi - # get latest network info & update raspiblitz.info + # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} @@ -328,34 +334,48 @@ done sed -i "s/^state=.*/state=booting/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} -# TODO: REMOVE LATER AGAIN -echo "DEBUG EXIT BREAK" >> $logFile -exit 1 - # get fresh info about data drive to continue source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -echo "isMounted: $isMounted" >> $logFile # check if the HDD is auto-mounted ( auto-mounted = setup-done) +echo "isMounted: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then - echo "HDD is there but not AutoMounted yet - checking Setup" >> $logFile + echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile - # when format is not EXT4 or BTRFS - stop bootstrap and await user setup - if [ "${hddFormat}" != "ext4" ] && [ "${hddFormat}" != "btrfs" ]; then - echo "HDD is NOT formatted in ${hddFormat} .. awaiting user setup." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='HDD needs SetUp (1)'/g" ${infoFile} - exit 0 + # determine correct info message + infoMessage="Please Login for Setup" + if [ "${hddRaspiData}" == "1" ]; then + infoMessage="Please Login for Update" + elif [ "${hddGotMigrationData}" != "" ]; then + infoMessage="Please Login for Migration" + elif [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then + infoMessage="Login for presynced Setup" fi - # when error on analysing HDD - stop bootstrap and await user setup - if [ ${#hddError} -gt 0 ]; then - echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} - exit 0 - fi + # signal "WAIT LOOP: SETUP" to outside + echo "Displaying Info Message: ${infoMessage}" >> $logFile + sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} + sed -i "s/^message=.*/message='${infoMessage}'/g" ${infoFile} + + ############################################# + # WAIT LOOP: USER SETUP/UPDATE/MIGRATION + # until SSH or WEBUI setup data is available + ############################################# + + gotUserSetupInfo=0 + until [ ${gotUserSetupInfo} -eq 1 ] + do + + # TODO: DETECT WHEN USER SETUP IS DONE + + # get latest network info & update raspiblitz.info (in case network changes) + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + sleep 1 + +done + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile From 99ab1afb24e7e6252f1bc73d2aec9abb5d5636b4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 16:40:23 +0200 Subject: [PATCH 121/293] introduce setupPhase --- home.admin/_bootstrap.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b75d9f59a..1af106b46 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -38,6 +38,7 @@ echo "***********************************************" >> $logFile network="" chain="" setupStep=0 +setupPhase='boot' fsexpanded=0 # see https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284 displayClass="lcd" @@ -71,6 +72,7 @@ echo "fsexpanded=${fsexpanded}" >> $infoFile echo "displayClass=${displayClass}" >> $infoFile echo "displayType=${displayType}" >> $infoFile echo "setupStep=${setupStep}" >> $infoFile +echo "setupPhase=${setupPhase}" >> $infoFile echo "fundRecovery=${fundRecovery}" >> $infoFile if [ "${setupStep}" != "100" ]; then echo "hostname=${hostname}" >> $infoFile @@ -345,18 +347,23 @@ if [ ${isMounted} -eq 0 ]; then # determine correct info message infoMessage="Please Login for Setup" + setupPhase="setup" if [ "${hddRaspiData}" == "1" ]; then infoMessage="Please Login for Update" + setupPhase="update" elif [ "${hddGotMigrationData}" != "" ]; then infoMessage="Please Login for Migration" + setupPhase="migration" elif [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then infoMessage="Login for presynced Setup" + setupPhase="presync" fi - # signal "WAIT LOOP: SETUP" to outside + # signal "WAIT LOOP: SETUP" to LCD, SSH & WEBAPI echo "Displaying Info Message: ${infoMessage}" >> $logFile sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} sed -i "s/^message=.*/message='${infoMessage}'/g" ${infoFile} + sed -i "s/^setupPhase=.*/setupPhase='${setupPhase}'/g" ${infoFile} ############################################# # WAIT LOOP: USER SETUP/UPDATE/MIGRATION @@ -460,6 +467,8 @@ done fi # END - no automount - after this HDD is mounted +sed -i "s/^setupPhase=.*/setupPhase='starting'/g" ${infoFile} + # if a WIFI config exists backup to HDD configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=") if [ ${configWifiExists} -eq 1 ]; then @@ -668,5 +677,7 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} # make sure that bitcoin service is active sudo systemctl enable ${network}d +sed -i "s/^setupPhase=.*/setupPhase='final'/g" ${infoFile} + echo "DONE BOOTSTRAP" >> $logFile exit 0 From 21e5c1e4dc305b2ff78d80d6b77edb43d0252980 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 18:56:39 +0200 Subject: [PATCH 122/293] test exit code of sub menus --- home.admin/00mainMenu.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 674a35664..0c64023ea 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -310,10 +310,7 @@ case $CHOICE in ;; REPAIR) /home/admin/98repairMenu.sh - if [ $? -eq 99 ]; then - exit 1 - fi - ;; + # exit code 1 -> main menu to break loop and also exit with PASSWORD) sudo /home/admin/config.scripts/blitz.setpassword.sh ;; @@ -360,5 +357,6 @@ case $CHOICE in exit 0 esac -# go into loop - start script from beginning to load config/sate fresh -/home/admin/00mainMenu.sh +echo "exit code of last submenu: $?" + +# exit with not 0 to signal that main menu wants to be looped From 4089f470f9fd214cd9371469f917ee1df323c1b1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 18:57:29 +0200 Subject: [PATCH 123/293] fix mein menu --- home.admin/00mainMenu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 0c64023ea..2b8f777ec 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -310,7 +310,7 @@ case $CHOICE in ;; REPAIR) /home/admin/98repairMenu.sh - # exit code 1 -> main menu to break loop and also exit with + ;; PASSWORD) sudo /home/admin/config.scripts/blitz.setpassword.sh ;; From 9d72e3b91a4c866174f905f19a67dcf979dc3584 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 19:01:56 +0200 Subject: [PATCH 124/293] test exit code submenu --- home.admin/99lightningMenu.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/99lightningMenu.sh b/home.admin/99lightningMenu.sh index 63ea9d920..73e72cadf 100644 --- a/home.admin/99lightningMenu.sh +++ b/home.admin/99lightningMenu.sh @@ -107,6 +107,7 @@ case $CHOICE in sudo /home/admin/XXshutdown.sh reboot exit 0 fi + exit 1 ;; CLOSEALL) /home/admin/BBcloseAllChannels.sh From d7f19721e55a48c1a611cac33985f98b3a82ec84 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:00:36 +0200 Subject: [PATCH 125/293] remove test --- home.admin/99lightningMenu.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/99lightningMenu.sh b/home.admin/99lightningMenu.sh index 73e72cadf..63ea9d920 100644 --- a/home.admin/99lightningMenu.sh +++ b/home.admin/99lightningMenu.sh @@ -107,7 +107,6 @@ case $CHOICE in sudo /home/admin/XXshutdown.sh reboot exit 0 fi - exit 1 ;; CLOSEALL) /home/admin/BBcloseAllChannels.sh From f613ed1bb6a278fcab11c1b730442ff96c58c041 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:00:56 +0200 Subject: [PATCH 126/293] placeholders --- home.admin/setup.scripts/afterProvision.sh | 51 +++++++++++++++++++ ...{00provisionInfo.sh => beforeProvision.sh} | 10 ++-- 2 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 home.admin/setup.scripts/afterProvision.sh rename home.admin/setup.scripts/{00provisionInfo.sh => beforeProvision.sh} (59%) diff --git a/home.admin/setup.scripts/afterProvision.sh b/home.admin/setup.scripts/afterProvision.sh new file mode 100644 index 000000000..c89e9e7ca --- /dev/null +++ b/home.admin/setup.scripts/afterProvision.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# this is more a todo list of things that got removed from oter parts of the old setup/login and need to find a new place/home + + +############# SCB activation + + # check if there is a channel.backup to activate + gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup') + if [ ${gotSCB} -eq 1 ]; then + + echo "*** channel.backup Recovery ***" + lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp + error=`cat /home/admin/.error.tmp` + rm /home/admin/.error.tmp 2>/dev/null + + if [ ${#error} -gt 0 ]; then + + # output error message + echo "" + echo "!!! FAIL !!! SOMETHING WENT WRONG:" + echo "${error}" + + # check if its possible to give background info on the error + notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') + if [ ${notMachtingSeed} -gt 0 ]; then + echo "--> ERROR BACKGROUND:" + echo "The WORD SEED is not matching the channel.backup file." + echo "Either there was an error in the word seed list or" + echo "or the channel.backup file is from another RaspiBlitz." + echo + fi + + # basic info on error + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo + echo "You can try after full setup to restore channel.backup file again with:" + echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup" + echo + echo "Press ENTER to continue for now ..." + read key + else + mv /home/admin/channel.backup /home/admin/channel.backup.done + dialog --title " OK channel.backup IMPORT " --msgbox " +LND accepted the channel.backup file you uploaded. +It will now take around a hour until you can see, +if LND was able to recover funds from your channels. + " 9 56 + fi + + fi \ No newline at end of file diff --git a/home.admin/setup.scripts/00provisionInfo.sh b/home.admin/setup.scripts/beforeProvision.sh similarity index 59% rename from home.admin/setup.scripts/00provisionInfo.sh rename to home.admin/setup.scripts/beforeProvision.sh index 8b1bcab7a..70eb24a92 100755 --- a/home.admin/setup.scripts/00provisionInfo.sh +++ b/home.admin/setup.scripts/beforeProvision.sh @@ -1,10 +1,10 @@ #!/bin/bash -################### +# TODO: if DNS is not working --> ask in system-loop +# TODO: get size of sd card & free space on sd card + +################## # CHECK IF DNS NEEDS SETTING DURING SETUP # https://github.com/rootzoll/raspiblitz/issues/787 ################### -sudo /home/admin/config.scripts/internet.dns.sh test - -# TODO: if DNS is not working --> ask in system-loop -# TODO: get size of sd card & free space on sd card \ No newline at end of file +sudo /home/admin/config.scripts/internet.dns.sh test \ No newline at end of file From 72f596fa1210ce933c177e49c857d505b1411507 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:01:11 +0200 Subject: [PATCH 127/293] move garant detection to statusscan --- home.admin/00mainMenu.sh | 10 +- home.admin/00raspiblitz.sh | 195 +++++++++++------- home.admin/_bootstrap.sh | 4 +- home.admin/config.scripts/blitz.statusscan.sh | 3 + 4 files changed, 138 insertions(+), 74 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 2b8f777ec..8648d0e50 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -357,6 +357,10 @@ case $CHOICE in exit 0 esac -echo "exit code of last submenu: $?" - -# exit with not 0 to signal that main menu wants to be looped +# forward exit code of submenu to outside loop +# 0 = continue loop / everything else = break loop and exit to terminal +exitCodeOfSubmenu=$? +if [ "${exitCodeOfSubmenu}" != "0" ]; then + echo "# submenu signaled exit code '${exitCodeOfSubmenu}' --> forward to outside loop" +fi +exit ${exitCodeOfSubmenu} \ No newline at end of file diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 07820d19d..845972f31 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" echo "or call the command 'debug' to see bigger report." -echo "Starting the main menu ..." +echo "Starting SSH user interface ..." # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" @@ -9,36 +9,136 @@ configFile="/mnt/hdd/raspiblitz.conf" # INFOFILE - state data from bootstrap infoFile="/home/admin/raspiblitz.info" -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ "${error}" != "" ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." +# check if raspiblitz.info exists +systemInfoExists=$(ls ${infoFile} | grep -c "${infoFile}") +if [ "${systemInfoExists}" != "1" ]; then + echo "systemInfoExists(${systemInfoExists})" + echo "FAIL: ${infoFile} does not exist .. which it should at this point." + echo "Check logs & bootstrap.service for errors and report to devs." exit 1 fi -# check if HDD is connected -if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." - echo "***********************************************************" - vagrant=$(df | grep -c "/vagrant") - if [ ${vagrant} -gt 0 ]; then - echo "To connect a HDD data disk to your VagrantVM:" - echo "- shutdown VM with command: off" - echo "- open your VirtualBox GUI and select RaspiBlitzVM" - echo "- change the 'mass storage' settings" - echo "- add a second 'Primary Slave' drive to the already existing controller" - echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" - echo "***********************************************************" - echo "You can either create a new dynamic VDI with around 900GB or download" - echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" - echo "space on your laptop you can store the VDI file on an external drive." - echo "***********************************************************" - fi - exit +# get system state information raspiblitz.info +source ${infoFile} + +# check that basic system phase/state information is available +if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then + echo "setupPhase(${setupPhase}) state(${state})" + echo "FAIL: ${infoFile} does not contain important state information." + echo "Check logs & bootstrap.service for errors and report to devs." + exit 1 fi +##################################### +# REDIRECT: Main Menu +##################################### + +# if setup is done & state is ready .. jump to main menu +if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + # push user to main menu + /home/admin/00mainMenu.sh + exit 0 +fi + +##################################### +# SSH MENU LOOP +##################################### + +# prepare status file +# TODO: this is to be replaced and unified together with raspiblitz.info +# when we move to a background monitoring thread & redis for WebUI with v1.8 +sudo touch /var/cache/raspiblitz/raspiblitz.status +sudo chown admin:admin /var/cache/raspiblitz/raspiblitz.status +sudo chmod 740 /var/cache/raspiblitz/raspiblitz.status + +exitMenuLoop=0 +while [ ${exitMenuLoop} -eq 0 ] +do + + ##################################### + # MAIN SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + # push user to main menu + /home/admin/00mainMenu.sh + # use the exit code from main menu als signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ] break + fi + + ##################################### + # Access fresh system info + + # refresh system state information + source ${infoFile} + + # gather fresh status scan and store results in memory + sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status + source /var/cache/raspiblitz/raspiblitz.status + + ##################################### + # DURING SETUP: Handle System States + ##################################### + + if [ "${setupPhase}" != "done" ]; then + + echo "# DURING SETUP: Handle System States " + + # check if HDD is connected + if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then + echo "***********************************************************" + echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." + echo "***********************************************************" + if [ ${vagrant} -gt 0 ]; then + echo "To connect a HDD data disk to your VagrantVM:" + echo "- shutdown VM with command: off" + echo "- open your VirtualBox GUI and select RaspiBlitzVM" + echo "- change the 'mass storage' settings" + echo "- add a second 'Primary Slave' drive to the already existing controller" + echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" + echo "***********************************************************" + echo "You can either create a new dynamic VDI with around 900GB or download" + echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" + echo "space on your laptop you can store the VDI file on an external drive." + echo "***********************************************************" + fi + fi + + fi + + ##################################### + # ALWAYS: Handle System States + ##################################### + + ############################ + # LND Wallet Unlock + + echo "walletLocked(${walletLocked})" + if [ "${walletLocked}" == "1" ]; then + /home/admin/config.scripts/lnd.unlock.sh + fi + + ##################################### + # AFTER SETUP: Handle System States + ##################################### + + if [ "${setupPhase}" == "done" ]; then + + echo "# AFTER SETUP: Handle System States " + + fi + + # debug wait + echo "uptime(${uptime})" + sleep 3 + +done +echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" + + # check if HDD is from another fullnode OS and offer migration if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]") @@ -354,50 +454,7 @@ else # wait all is synced and ready waitUntilChainNetworkIsReady - # check if there is a channel.backup to activate - gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup') - if [ ${gotSCB} -eq 1 ]; then - echo "*** channel.backup Recovery ***" - lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp - error=`cat /home/admin/.error.tmp` - rm /home/admin/.error.tmp 2>/dev/null - - if [ ${#error} -gt 0 ]; then - - # output error message - echo "" - echo "!!! FAIL !!! SOMETHING WENT WRONG:" - echo "${error}" - - # check if its possible to give background info on the error - notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') - if [ ${notMachtingSeed} -gt 0 ]; then - echo "--> ERROR BACKGROUND:" - echo "The WORD SEED is not matching the channel.backup file." - echo "Either there was an error in the word seed list or" - echo "or the channel.backup file is from another RaspiBlitz." - echo - fi - - # basic info on error - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo - echo "You can try after full setup to restore channel.backup file again with:" - echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup" - echo - echo "Press ENTER to continue for now ..." - read key - else - mv /home/admin/channel.backup /home/admin/channel.backup.done - dialog --title " OK channel.backup IMPORT " --msgbox " -LND accepted the channel.backup file you uploaded. -It will now take around a hour until you can see, -if LND was able to recover funds from your channels. - " 9 56 - fi - - fi # check if DNS is working (if not it will trigger dialog) sudo /home/admin/config.scripts/internet.dns.sh test diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1af106b46..d608ca111 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -525,7 +525,7 @@ if [ ${configExists} -eq 1 ]; then echo "# (loop) waiting for internet ... " >> $logFile sed -i "s/^state=.*/state=nointernet/g" ${infoFile} sed -i "s/^message=.*/message='Waiting for Internet'/g" ${infoFile} - sleep 4 + sleep 3 else echo "# OK internet detected ... continue" >> $logFile waitForPublicIP=0 @@ -677,7 +677,7 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} # make sure that bitcoin service is active sudo systemctl enable ${network}d -sed -i "s/^setupPhase=.*/setupPhase='final'/g" ${infoFile} +sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} echo "DONE BOOTSTRAP" >> $logFile exit 0 diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index bb1534c7d..ff6b5c927 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -265,6 +265,9 @@ else echo "blitzTUIRestarts=0" fi +# check if runnig in vagrant +vagrant=$(df | grep -c "/vagrant") +echo "vagrant=${vagrant}" # check if online if problem with other stuff From a0f5ce823bf99392c090d2bf0d558ffb6f9afb3f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:06:55 +0200 Subject: [PATCH 128/293] fix syntax --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 845972f31..203f44c21 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -66,7 +66,7 @@ do # use the exit code from main menu als signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ] break + if [ "${exitMenuLoop}" != "0" ]; then break; fi fi ##################################### From 6fcbf7d07444f750116469dad7015ca555965f81 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:10:41 +0200 Subject: [PATCH 129/293] setup menu on raspiblitz loop --- home.admin/00raspiblitz.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 203f44c21..58ba6236e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -60,10 +60,24 @@ do ##################################### # if setup is done & state is ready .. jump to main menu - if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then # push user to main menu /home/admin/00mainMenu.sh - # use the exit code from main menu als signal if menu loop should exited + # use the exit code from main menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + + ##################################### + # SETUP SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then + # push user to main menu + /home/admin/setup.scripts/setupDialogControl.sh + # use the exit code from setup menu as signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal exitMenuLoop=$? if [ "${exitMenuLoop}" != "0" ]; then break; fi @@ -137,7 +151,9 @@ do done echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +exit 0 +################# TODO: MOVE PARTS BELOW TO APROPIATE NEW PLACE # check if HDD is from another fullnode OS and offer migration if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then From 7efa541482a5c7c3d5c00221a50b19ad372ff4e2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:16:46 +0200 Subject: [PATCH 130/293] exit terminal and return to setup --- home.admin/00mainMenu.sh | 36 ++++++++++++++---------------------- home.admin/00raspiblitz.sh | 10 ++++++++++ home.admin/_commands.sh | 7 ------- 3 files changed, 24 insertions(+), 29 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 8648d0e50..15c991dee 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -318,43 +318,35 @@ case $CHOICE in /home/admin/99updateMenu.sh ;; REBOOT) - clear - confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 - confirmationReboot=$? - if [ $confirmationReboot -eq 0 ]; then + clear + confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 + confirmationReboot=$? + if [ $confirmationReboot -eq 0 ]; then clear echo "" sudo /home/admin/XXshutdown.sh reboot - exit 0 - fi + exit 1 + fi ;; OFF) - clear - confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 - confirmationShutdown=$? - if [ $confirmationShutdown -eq 0 ]; then + clear + confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 + confirmationShutdown=$? + if [ $confirmationShutdown -eq 0 ]; then clear echo "" sudo /home/admin/XXshutdown.sh - exit 0 - fi + exit 1 + fi ;; DELETE) sudo /home/admin/XXcleanHDD.sh sudo /home/admin/XXshutdown.sh reboot - exit 0 + exit 1 ;; *) clear - echo "***********************************" - echo "* RaspiBlitz Commandline" - echo "* Here be dragons .. have fun :)" - echo "***********************************" - echo "Bitcoin command line options: bitcoin-cli help" - echo "LND command line options: lncli -h" - echo "Back to main menu use command: raspiblitz" - echo - exit 0 + exit 1 esac # forward exit code of submenu to outside loop diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 58ba6236e..10bd1e32b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -151,6 +151,16 @@ do done echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "***********************************" +echo "* RaspiBlitz Commandline" +echo "* Here be dragons .. have fun :)" +echo "***********************************" +if [ "${setupPhase}" == "done" ] + echo "Bitcoin command line options: bitcoin-cli help" + echo "LND command line options: lncli -h" +fi +echo "Back to menus use command: raspiblitz" +echo exit 0 ################# TODO: MOVE PARTS BELOW TO APROPIATE NEW PLACE diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cde070212..cb1ccf744 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -23,13 +23,6 @@ function menu() { ./00mainMenu.sh } -# command: setup -# calls the setup process -function setup() { - cd /home/admin - ./setup.scripts/setupDialogControl.sh -} - # command: repair # calls directly the repair menu function repair() { From 2edb37f722ae76845382ef565d952a495bad2443 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:17:23 +0200 Subject: [PATCH 131/293] fix syntax --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 10bd1e32b..e3d46f9f6 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -155,7 +155,7 @@ echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" echo "***********************************" -if [ "${setupPhase}" == "done" ] +if [ "${setupPhase}" == "done" ]; then echo "Bitcoin command line options: bitcoin-cli help" echo "LND command line options: lncli -h" fi From 893b78d68673ab5dcacfa2e3460e77193aa5ed3f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:18:32 +0200 Subject: [PATCH 132/293] debug sleep --- home.admin/00raspiblitz.sh | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index e3d46f9f6..47cc6b6ec 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -55,6 +55,21 @@ exitMenuLoop=0 while [ ${exitMenuLoop} -eq 0 ] do + ##################################### + # SETUP SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then + # push user to main menu + sleep 4 + /home/admin/setup.scripts/setupDialogControl.sh + # use the exit code from setup menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + ##################################### # MAIN SSH MENU ##################################### @@ -69,20 +84,6 @@ do if [ "${exitMenuLoop}" != "0" ]; then break; fi fi - ##################################### - # SETUP SSH MENU - ##################################### - - # if setup is done & state is ready .. jump to main menu - if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then - # push user to main menu - /home/admin/setup.scripts/setupDialogControl.sh - # use the exit code from setup menu as signal if menu loop should exited - # 0 = continue loop / everything else = break loop and exit to terminal - exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ]; then break; fi - fi - ##################################### # Access fresh system info From acdba5802af664b8555cb7ee04ea140d97720bfe Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:21:43 +0200 Subject: [PATCH 133/293] move debug info --- home.admin/00raspiblitz.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 47cc6b6ec..18b9de637 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,6 +1,4 @@ #!/bin/bash -echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" -echo "or call the command 'debug' to see bigger report." echo "Starting SSH user interface ..." # CONFIGFILE - configuration of RaspiBlitz @@ -62,7 +60,6 @@ do # if setup is done & state is ready .. jump to main menu if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then # push user to main menu - sleep 4 /home/admin/setup.scripts/setupDialogControl.sh # use the exit code from setup menu as signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal @@ -159,6 +156,10 @@ echo "***********************************" if [ "${setupPhase}" == "done" ]; then echo "Bitcoin command line options: bitcoin-cli help" echo "LND command line options: lncli -h" +else + echo "Your setup is not finished." + echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" + echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" echo From f3769d95076470414ae1627ac73848b20c12e403 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:23:45 +0200 Subject: [PATCH 134/293] exitcode info --- home.admin/00raspiblitz.sh | 2 +- home.admin/setup.scripts/setupDialogControl.sh | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 18b9de637..4dbd72194 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -148,7 +148,7 @@ do sleep 3 done -echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "# menu loop signaled exit code '${exitMenuLoop}' --> exit to terminal" echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 6957bf188..eae985005 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -28,8 +28,7 @@ if [ "${migrationOS}" == "" ]; then # on cancel - let user exit to terminal if [ "$?" != "0" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + echo "# you selected cancel - sending exit code 1" exit 1 fi @@ -86,8 +85,7 @@ else # allow user to cancel to terminal on dialog main menu # all other cancels have other exit codes if [ "$?" == "1" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + echo "# you selected cancel - sending exit code 1" exit 1 fi From 01789f7627926cbac18288d7c50f373bc013cd66 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:30:39 +0200 Subject: [PATCH 135/293] fix lingo --- home.admin/00raspiblitz.sh | 4 ++-- home.admin/_bootstrap.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4dbd72194..49175756e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -148,7 +148,7 @@ do sleep 3 done -echo "# menu loop signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal" echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" @@ -158,7 +158,7 @@ if [ "${setupPhase}" == "done" ]; then echo "LND command line options: lncli -h" else echo "Your setup is not finished." - echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" + echo "For setup logs: tail -n1000 -f raspiblitz.log" echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d608ca111..affc2080e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -284,14 +284,14 @@ echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile ################################ source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) if [ "${neededReboot}" == "1" ]; then - echo "UASP FIX applied (2st-try) ... reboot needed." >> $logFile + echo "UASP FIX applied (2nd-try) ... reboot needed." >> $logFile sudo cp ${logFile} ${logFile}.uasp sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} sudo shutdown -r now sleep 100 exit 0 else - echo "No UASP FIX needed (2st-try)." >> $logFile + echo "No UASP FIX needed (2nd-try)." >> $logFile fi ################################### From 68d83517e6c0719f682cd353e60062dbae627278 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:33:34 +0200 Subject: [PATCH 136/293] fix text infos --- home.admin/00raspiblitz.sh | 2 +- home.admin/_bootstrap.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 49175756e..b950c6fea 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -158,7 +158,7 @@ if [ "${setupPhase}" == "done" ]; then echo "LND command line options: lncli -h" else echo "Your setup is not finished." - echo "For setup logs: tail -n1000 -f raspiblitz.log" + echo "For setup logs: cat raspiblitz.log" echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index affc2080e..b2d71b890 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -340,7 +340,7 @@ sed -i "s/^message=.*/message='please wait'/g" ${infoFile} source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) # check if the HDD is auto-mounted ( auto-mounted = setup-done) -echo "isMounted: $isMounted" >> $logFile +echo "HDD already part of system: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile From 5cf3d9e4b52bf495c43f5d267995c5a5fa4f6bcb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:56:26 +0200 Subject: [PATCH 137/293] remove old redirect --- home.admin/00raspiblitz.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index b950c6fea..80862ca28 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -27,17 +27,6 @@ if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then exit 1 fi -##################################### -# REDIRECT: Main Menu -##################################### - -# if setup is done & state is ready .. jump to main menu -if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then - # push user to main menu - /home/admin/00mainMenu.sh - exit 0 -fi - ##################################### # SSH MENU LOOP ##################################### From 77780ff61fbd4f40a140a4d1ddf30d704ee4a07e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:56:43 +0200 Subject: [PATCH 138/293] reboot on HDD disconnect --- home.admin/_bootstrap.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b2d71b890..871d97ec0 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -381,6 +381,16 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} sleep 1 + # get fresh info about data drive (just in case user disconnects) + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; then + sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} + sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} + sudo shutdown -r now + sleep 100 + exit 0 + fi + done From 43eb266ce67bfb6268051c75e5f67472cbd68020 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:05:47 +0200 Subject: [PATCH 139/293] add info to logs --- home.admin/_bootstrap.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 871d97ec0..06b0e51e6 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -384,8 +384,10 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; then + echo "!!! WARNING !!! Lost HDD connection .. triggering reboot, to restart system-init." >> $logFile sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} + sudo cp ${logFile} ${logFile}.error sudo shutdown -r now sleep 100 exit 0 From 031ea7f3a5023e9738251562d437dffcee594625 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:08:22 +0200 Subject: [PATCH 140/293] make var check more robust --- home.admin/_bootstrap.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 06b0e51e6..1cc4ab80e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -252,11 +252,11 @@ do echo "hddCandidate: $hddCandidate" # in case of HDD analyse ERROR - if [ ${#hddError} -gt 0 ]; then + if [ "${hddError}" != "" ]; then echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} - elif [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then + elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} fi @@ -383,7 +383,7 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; then + if [ "${hddError}" != "" ] || [ "${hddCandidate}" == "" ]; then echo "!!! WARNING !!! Lost HDD connection .. triggering reboot, to restart system-init." >> $logFile sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} From 3ba4b9b513d6895bf81964b4b901a139fd613850 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:32:13 +0200 Subject: [PATCH 141/293] added debug --- home.admin/_bootstrap.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1cc4ab80e..29d829fa1 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -270,6 +270,10 @@ do done echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile +# write info for LCD +sed -i "s/^state=.*/state=system-init/g" ${infoFile} +sed -i "s/^message=.*/message='please wait'/g" ${infoFile} + #################################### # WIFI RESTORE from HDD works with # mem copy from datadrive inspection @@ -282,6 +286,7 @@ echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile # UASP FIX - second try # when HDD gets connected later ################################ +sed -i "s/^message=.*/message='checking HDD'/g" ${infoFile} source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) if [ "${neededReboot}" == "1" ]; then echo "UASP FIX applied (2nd-try) ... reboot needed." >> $logFile @@ -333,7 +338,7 @@ do done # write info for LCD -sed -i "s/^state=.*/state=booting/g" ${infoFile} +sed -i "s/^state=.*/state=inspect-hdd/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} # get fresh info about data drive to continue @@ -375,6 +380,7 @@ if [ ${isMounted} -eq 0 ]; then do # TODO: DETECT WHEN USER SETUP IS DONE + echo "TODO: DETECT WHEN USER SETUP IS DONE" >> $logFile # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) @@ -395,6 +401,10 @@ if [ ${isMounted} -eq 0 ]; then done +############################### TODO: RE-ARRANGE THE PARTS BELOW +echo "TODO: RE-ARRANGE THE PARTS BELOW" >> $logFile +exit 0 + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile From 471d515cfaea237b1c7dfb1a5ab7e131d06958b4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:55:26 +0200 Subject: [PATCH 142/293] debug info --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 29d829fa1..2a3886ae9 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -380,7 +380,7 @@ if [ ${isMounted} -eq 0 ]; then do # TODO: DETECT WHEN USER SETUP IS DONE - echo "TODO: DETECT WHEN USER SETUP IS DONE" >> $logFile + echo "TODO: DETECT WHEN USER SETUP IS DONE hddError(${hddError}) hddCandidate(${hddCandidate})" >> $logFile # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) From b229149c1adb87b29cb366be6af5e9b9f5130a9a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:04:42 +0200 Subject: [PATCH 143/293] change detection --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 2a3886ae9..1e39d8115 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -389,7 +389,7 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - if [ "${hddError}" != "" ] || [ "${hddCandidate}" == "" ]; then + if [ "${hddCandidate}" == "" ]; then echo "!!! WARNING !!! Lost HDD connection .. triggering reboot, to restart system-init." >> $logFile sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} From 041f2feb99f7bae0a3599bf84db2807196c3315a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:11:29 +0200 Subject: [PATCH 144/293] fix comment --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1e39d8115..3277479b9 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -387,7 +387,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} sleep 1 - # get fresh info about data drive (just in case user disconnects) + # get fresh info about data drive (in case the hdd gets disconnected) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) if [ "${hddCandidate}" == "" ]; then echo "!!! WARNING !!! Lost HDD connection .. triggering reboot, to restart system-init." >> $logFile From f08c2ed809ae1d6e811bda9ded963f67464be5eb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:12:37 +0200 Subject: [PATCH 145/293] short sleep for info --- home.admin/_bootstrap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 3277479b9..e5a769a63 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -394,6 +394,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} sudo cp ${logFile} ${logFile}.error + sleep 3 sudo shutdown -r now sleep 100 exit 0 From aa088539cd90edd71932b2a5ab2f28783e9f441a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:16:40 +0200 Subject: [PATCH 146/293] longer sleep --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index e5a769a63..c0f727673 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -394,7 +394,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} sudo cp ${logFile} ${logFile}.error - sleep 3 + sleep 6 sudo shutdown -r now sleep 100 exit 0 From 0264a6c2fb2bc07d9777bc675215a8f9a4920361 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 10:42:53 +0200 Subject: [PATCH 147/293] loop with a little more sleep time --- home.admin/_bootstrap.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index c0f727673..7230412a4 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -385,7 +385,6 @@ if [ ${isMounted} -eq 0 ]; then # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} - sleep 1 # get fresh info about data drive (in case the hdd gets disconnected) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) @@ -400,6 +399,9 @@ if [ ${isMounted} -eq 0 ]; then exit 0 fi + # give the loop a little bed time + sleep 4 + done ############################### TODO: RE-ARRANGE THE PARTS BELOW From 596cc7e7c1b2cc6514d6f99150d19a0dd8cc91c9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 21:51:54 +0200 Subject: [PATCH 148/293] add debug info --- home.admin/00raspiblitz.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 80862ca28..9700de321 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -89,6 +89,7 @@ do echo "# DURING SETUP: Handle System States " # check if HDD is connected + echo "isMounted(${isMounted}) hddCandidate(${hddCandidate})" if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then echo "***********************************************************" echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." @@ -106,6 +107,7 @@ do echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" fi + exit 1 fi fi From a0f90dadbddbee9f19a9d2c2913183b75077b6ba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:12:09 +0200 Subject: [PATCH 149/293] handle info wait events --- home.admin/00raspiblitz.sh | 22 ++++---- home.admin/setup.scripts/eventInfoWait.sh | 66 +++++++++++++++++++++++ 2 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 home.admin/setup.scripts/eventInfoWait.sh diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 9700de321..b3856971b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -86,15 +86,13 @@ do if [ "${setupPhase}" != "done" ]; then - echo "# DURING SETUP: Handle System States " + echo "# DURING SETUP: Handle System State (${state})" - # check if HDD is connected - echo "isMounted(${isMounted}) hddCandidate(${hddCandidate})" - if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." - echo "***********************************************************" - if [ ${vagrant} -gt 0 ]; then + # when no HDD on Vagrant - just print info & exit (admin info) + if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then + echo "***********************************************************" + echo "VAGRANT INFO" + echo "***********************************************************" echo "To connect a HDD data disk to your VagrantVM:" echo "- shutdown VM with command: off" echo "- open your VirtualBox GUI and select RaspiBlitzVM" @@ -106,8 +104,14 @@ do echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" + exit 1 + else + + # every other state just push as event to SSH frontend + /home/admin/setup.scripts/eventInfoWait.sh ${state} + fi - exit 1 + fi fi diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh new file mode 100644 index 000000000..d67b08298 --- /dev/null +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# this is an dialog that handles all UI events during setup that require a "info & wait" with no interaction + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/_version.info +source /home/admin/raspiblitz.info + +# 1st PARAMETER: eventID +# fixed ID string for a certain event +eventID=$1 +if [ "${eventID}" == "" ]; then + echo "err='missing eventID'" + exit 1 +fi + +# 2nd PARAMETER (optional): dynamic content that can be used in two ways +# 1) contentWords[] --> if eventID is known & well defined between backend & frontend, then use the single words of this string as dynamic content for static text info +# 2) contentString --> if eventID is new and not well defined yet, then just show a generic info and use the complete string as info message +# just see examples of this two use cases below +contentWords=($2) +contentString=$2 + +# default backtitle for dialog +backtitle="RaspiBlitz ${codeVersion} / ${locialip} / ${tempCelsius}°C" + +################################################ +# 1) WELL DEFINED EVENTS +################################################ + +if [ "${eventID}" == "starting" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Starting RaspiBlitz +Please wait ... +" 6 24 + +elif [ "${eventID}" == "noHDD" ]; then + + # contentWords[1] --> size string (for example '1TB') + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for HDD/SSD +Please connect min ${contentWords[1]} +HDD or SSD to the the device. +" 8 40 + +elif [ "${eventID}" == "sdtoosmall" ]; then + + # contentWords[1] --> size string (for example '16GB') + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +PROBLEM: SD CARD IS TOO SMALL +Minumum of ${contentWords[1]} needed +Cut power & create fresh sd card +" 8 40 + +################################################ +# 2) GENERIC EVENT +# may get better defined in the future +################################################ + +else + + # a generic info box for not further defined events + dialog --title "${eventid}" --backtitle "${backtitle}" --cr-wrap --infobox "\n${contentString}" 7 50 + +fi \ No newline at end of file From 7927ca4286ff921b27791df9bfd93ef8bd26d6d2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:13:18 +0200 Subject: [PATCH 150/293] fix syntax --- home.admin/00raspiblitz.sh | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index b3856971b..7735b5a60 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -90,28 +90,26 @@ do # when no HDD on Vagrant - just print info & exit (admin info) if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then - echo "***********************************************************" - echo "VAGRANT INFO" - echo "***********************************************************" - echo "To connect a HDD data disk to your VagrantVM:" - echo "- shutdown VM with command: off" - echo "- open your VirtualBox GUI and select RaspiBlitzVM" - echo "- change the 'mass storage' settings" - echo "- add a second 'Primary Slave' drive to the already existing controller" - echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" - echo "***********************************************************" - echo "You can either create a new dynamic VDI with around 900GB or download" - echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" - echo "space on your laptop you can store the VDI file on an external drive." - echo "***********************************************************" - exit 1 - else + echo "***********************************************************" + echo "VAGRANT INFO" + echo "***********************************************************" + echo "To connect a HDD data disk to your VagrantVM:" + echo "- shutdown VM with command: off" + echo "- open your VirtualBox GUI and select RaspiBlitzVM" + echo "- change the 'mass storage' settings" + echo "- add a second 'Primary Slave' drive to the already existing controller" + echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" + echo "***********************************************************" + echo "You can either create a new dynamic VDI with around 900GB or download" + echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" + echo "space on your laptop you can store the VDI file on an external drive." + echo "***********************************************************" + exit 1 + else # every other state just push as event to SSH frontend /home/admin/setup.scripts/eventInfoWait.sh ${state} - fi - fi fi From bf7444c7ff00342a18aec2777b97ae0290b3c832 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:15:31 +0200 Subject: [PATCH 151/293] debug state --- home.admin/00raspiblitz.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 7735b5a60..443caf38e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -108,7 +108,7 @@ do else # every other state just push as event to SSH frontend - /home/admin/setup.scripts/eventInfoWait.sh ${state} + /home/admin/setup.scripts/eventInfoWait.sh "c-${state}" "${message}" fi @@ -137,7 +137,6 @@ do fi # debug wait - echo "uptime(${uptime})" sleep 3 done From f5f666c16eea824c964a4c14d9804c72c9ea1fba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:16:22 +0200 Subject: [PATCH 152/293] remove debug output --- home.admin/00raspiblitz.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 443caf38e..7f3143185 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -120,8 +120,7 @@ do ############################ # LND Wallet Unlock - - echo "walletLocked(${walletLocked})" + if [ "${walletLocked}" == "1" ]; then /home/admin/config.scripts/lnd.unlock.sh fi From 676b81bd026b953a36e172b1cce056f2bcb703a5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:39:37 +0200 Subject: [PATCH 153/293] give on no HDD more info --- home.admin/_bootstrap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 7230412a4..eb168e439 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -258,6 +258,7 @@ do sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} + sed -i "s/^message=.*/message='1TB'/g" ${infoFile} fi # get latest network info & update raspiblitz.info (in case network changes) From 2fc6471c9819511a98108e4b06d8e25e9f8ac7fc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:40:33 +0200 Subject: [PATCH 154/293] remove info --- home.admin/00raspiblitz.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 7f3143185..fe457f8d3 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -108,7 +108,7 @@ do else # every other state just push as event to SSH frontend - /home/admin/setup.scripts/eventInfoWait.sh "c-${state}" "${message}" + /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" fi @@ -120,7 +120,7 @@ do ############################ # LND Wallet Unlock - + if [ "${walletLocked}" == "1" ]; then /home/admin/config.scripts/lnd.unlock.sh fi From 149aab7e6f86bd8be0376e7022d7329a7e4bc579 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:51:23 +0200 Subject: [PATCH 155/293] fix dynamic content noHDD --- home.admin/setup.scripts/eventInfoWait.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d67b08298..8148d0c37 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -37,12 +37,12 @@ Please wait ... elif [ "${eventID}" == "noHDD" ]; then - # contentWords[1] --> size string (for example '1TB') + # contentWords[0] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Waiting for HDD/SSD -Please connect min ${contentWords[1]} +Please connect min ${contentWords[0]} HDD or SSD to the the device. -" 8 40 +" 7 34 elif [ "${eventID}" == "sdtoosmall" ]; then From f9e15cba1c7c5553a0053f2bc74a1b4c0a7172a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:54:14 +0200 Subject: [PATCH 156/293] remove temp for now --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 8148d0c37..d2a3010f1 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -22,7 +22,7 @@ contentWords=($2) contentString=$2 # default backtitle for dialog -backtitle="RaspiBlitz ${codeVersion} / ${locialip} / ${tempCelsius}°C" +backtitle="RaspiBlitz ${codeVersion} / ${localip}" ################################################ # 1) WELL DEFINED EVENTS From bab6b0a30724ea2aebad2bc286a6003e22469852 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:08:21 +0200 Subject: [PATCH 157/293] change info text --- home.admin/00raspiblitz.sh | 1 + home.admin/setup.scripts/eventInfoWait.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index fe457f8d3..46b692ce6 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -77,6 +77,7 @@ do source ${infoFile} # gather fresh status scan and store results in memory + # TODO: move this into background loop and unify with redis data storage later sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status source /var/cache/raspiblitz/raspiblitz.status diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d2a3010f1..564e1cb5b 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -40,7 +40,7 @@ elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Waiting for HDD/SSD -Please connect min ${contentWords[0]} +Please connect minimum ${contentWords[0]} HDD or SSD to the the device. " 7 34 From 452d6fafb8ccdcac36e94d867c997313c84ec2b2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:23:02 +0200 Subject: [PATCH 158/293] critical error info --- home.admin/00raspiblitz.sh | 15 ++++++++++++++- home.admin/setup.scripts/eventInfoWait.sh | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 46b692ce6..c5f8f1b43 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -89,7 +89,7 @@ do echo "# DURING SETUP: Handle System State (${state})" - # when no HDD on Vagrant - just print info & exit (admin info) + # when no HDD on Vagrant - just print info & exit (admin info & exit) if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then echo "***********************************************************" echo "VAGRANT INFO" @@ -106,6 +106,19 @@ do echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" exit 1 + + # for all critical errors (admin info & exit) + if [ "${state}" == "errorHDD" ]; then + echo "***********************************************************" + echo "SETUP ERROR - please report to development team" + echo "***********************************************************" + echo "state(${state}) message(${message})" + if [ "${state}" == "errorHDD" ]; then + # print some debug detail info on HDD/SSD error + sudo /home/admin/config.scripts/blitz.datadrive.sh status + fi + echo "command to shutdown --> off" + exit 1 else # every other state just push as event to SSH frontend diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 564e1cb5b..e604e5811 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -35,6 +35,12 @@ Starting RaspiBlitz Please wait ... " 6 24 +elif [ "${eventID}" == "reboot" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Shutting down for reboot. +" 5 30 + elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') From 4ff3e3deb288962b94fb101a9ad4f8406a0bacf2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:27:26 +0200 Subject: [PATCH 159/293] add event system-init --- home.admin/setup.scripts/eventInfoWait.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index e604e5811..2bacd75b7 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -28,7 +28,7 @@ backtitle="RaspiBlitz ${codeVersion} / ${localip}" # 1) WELL DEFINED EVENTS ################################################ -if [ "${eventID}" == "starting" ]; then +if [ "${eventID}" == "starting" ] || [ "${eventID}" == "system-init" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Starting RaspiBlitz @@ -41,6 +41,7 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 + elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') From aaa9f4dde73c50d9e73968e8cb570851add8ae1c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 13 May 2021 14:31:15 +0200 Subject: [PATCH 160/293] DHCP event --- home.admin/00infoLCD.sh | 6 +-- home.admin/_bootstrap.sh | 6 +-- home.admin/setup.scripts/eventInfoWait.sh | 49 +++++++++++++++++++---- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 68028b435..ab3f44166 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -126,8 +126,8 @@ while : continue fi - # waiting for DHCP in general - if [ "${state}" = "noIP" ]; then + # waiting for local IP + if [ "${state}" = "noIP-LAN" ] || [ "${state}" = "noIP-WIFI" ]; then l1="Waiting for Network ...\n" l2="Not able to get local IP.\n" l3="LAN cable connected? WIFI lost?\n" @@ -136,7 +136,7 @@ while : continue fi - # waiting for DHCP in general + # waiting for Internet if [ "${state}" = "noInternet" ]; then l1="Waiting for Internet ...\n" l2="Local Network seems OK but no Internet.\n" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index eb168e439..6a58876ce 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -316,16 +316,16 @@ do # check state of network if [ ${dhcp} -eq 0 ]; then # display user waiting for DHCP - sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} + sed -i "s/^state=.*/state=noDHCP/g" ${infoFile} sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} elif [ ${#localip} -eq 0 ]; then if [ ${configWifiExists} -eq 0 ]; then # display user to connect LAN - sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^state=.*/state=noIP-LAN/g" ${infoFile} sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} else # display user that wifi settings are not working - sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^state=.*/state=noIP-WIFI/g" ${infoFile} sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} fi elif [ ${online} -eq 0 ]; then diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 2bacd75b7..3d1e199a6 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -41,15 +41,50 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 +elif [ "${eventID}" == "noDHCP" ]; then -elif [ "${eventID}" == "noHDD" ]; then - - # contentWords[0] --> size string (for example '1TB') + # this event is mostly for LCD/HDMI display + # because if device gets no local IP + # SSH & WEBUI would not have connected yet dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Waiting for HDD/SSD -Please connect minimum ${contentWords[0]} -HDD or SSD to the the device. -" 7 34 +Waiting for local IP address ... +If this takes too long please check +your connection to internet router. +" 7 41 + +elif [ "${eventID}" = "noIP-LAN" ] || [ "${eventID}" = "noIP-WIFI" ]; then + + # this event is mostly for LCD/HDMI display + # because if device gets no local IP + # SSH & WEBUI would not have connected yet + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Network ... +Not able to get local IP. +LAN cable connected? WIFI lost? +" 7 41 + +elif [ "${eventID}" = "noInternet" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Internet ... +Local Network seems OK but no Internet. +Is your router still online? +" 7 43 + +elif [ "${eventID}" = "noInternet" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Internet ... +Local Network seems OK but no Internet. +Is your router still online? +" 7 43 + +elif [ "${eventID}" == "inspect-hdd" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Checking HDD/SSD ... +Please wait. +" 6 26 elif [ "${eventID}" == "sdtoosmall" ]; then From 4ddfa473e83e13776106af782c0f4e771c96c793 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Thu, 13 May 2021 18:45:09 +0200 Subject: [PATCH 161/293] #2247 fix IP2Tor/Letsencrypt subscriptions (#2298) --- .../blitz.subscriptions.letsencrypt.py | 4 +-- .../config.scripts/bonus.letsencrypt.sh | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index beecb5ef3..25d81af11 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -46,8 +46,8 @@ cfg.reload() # todo: make sure that also ACME script uses TOR if activated session = requests.session() -if cfg.run_behind_tor.value: - session.proxies = {'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050'} +# if cfg.run_behind_tor.value: +# session.proxies = {'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050'} ##################### diff --git a/home.admin/config.scripts/bonus.letsencrypt.sh b/home.admin/config.scripts/bonus.letsencrypt.sh index 122b9248f..2b01b5f13 100755 --- a/home.admin/config.scripts/bonus.letsencrypt.sh +++ b/home.admin/config.scripts/bonus.letsencrypt.sh @@ -22,16 +22,17 @@ ACME_CERT_HOME="${ACME_CONFIG_HOME}/certs" ACME_IS_INSTALLED=0 # if Tor is on test that CURL is by default running over Tor -if [ "${runBehindTor}" == "on" ]; then - echo "# checking if Tor proxy for CURL is working ..." - checkTor=$(curl -s https://check.torproject.org | grep -c "Congratulations") - if [ ${checkTor} -eq 0 ]; then - echo "err='curl tor proxy not working'" - exit 1 - else - echo "# OK Tor proxy for CURL" - fi -fi +# TODO: issue https://github.com/rootzoll/raspiblitz/issues/1341 +#if [ "${runBehindTor}" == "on" ]; then +# echo "# checking if Tor proxy for CURL is working ..." +# checkTor=$(curl -s https://check.torproject.org | grep -c "Congratulations") +# if [ ${checkTor} -eq 0 ]; then +# echo "err='curl tor proxy not working'" +# exit 1 +# else +# echo "# OK Tor proxy for CURL" +# fi +#fi ################### # FUNCTIONS @@ -139,13 +140,18 @@ function refresh_certs_with_nginx() { fi certsDirectories=$(sudo ls ${ACME_CERT_HOME}) + echo "# certsDirectories(${certsDirectories})" directoryArray=(`echo "${certsDirectories}" | tr ' ' ' '`) for i in "${directoryArray[@]}"; do FQDN=$(echo "${i}" | cut -d "_" -f1) + echo "# i(${i})" + echo "# FQDN(${FQDN})" # check if there is a LetsEncrypt Subscription for this domain details=$(/home/admin/config.scripts/blitz.subscriptions.letsencrypt.py subscription-detail $FQDN) if [ ${#details} -gt 10 ]; then + echo "# details(${details})" + # get target for that domain options=$(echo "${details}" | jq -r ".target") From 9ae4089994964c6e321cf646ec45c8e1fe20eb2b Mon Sep 17 00:00:00 2001 From: Igor Bubelov Date: Mon, 17 May 2021 00:30:05 +0700 Subject: [PATCH 162/293] Remove documentation for non-existent feature (#2281) --- README.md | 6 ------ pictures/repairmenu.png | Bin 36327 -> 111307 bytes 2 files changed, 6 deletions(-) diff --git a/README.md b/README.md index 2b013979f..e232d89b2 100644 --- a/README.md +++ b/README.md @@ -823,12 +823,6 @@ The `REPAIR` menu gives you options to check and reset your RaspiBlitz. The options are explained in detail below: -##### HARDWARE: Run Hardware Test - -This will start the hardware test to identify if your RaspiBlitz is in good shape and can provide a stable service. - -Use this option if you see under-voltage reports on your LCD display or you think your RaspiBlitz gets very hot. - ##### SOFTWARE: Run Software Tests (DebugReport) This will print out a lot of information that can be used to find software problems. diff --git a/pictures/repairmenu.png b/pictures/repairmenu.png index b1b3213950117cdb60c54a17808157715216558a..e1e5f3ebe0c941791ca58cd06836e13d87442ea2 100644 GIT binary patch literal 111307 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

J6+v_SJ?)Ed)EB~p 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

k1FmYI=Br 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 literal 36327 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

|^sBfp(Uv9Ix01bHnv{nCS$dPgl=qp?1!5j^z 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 From 3c0bde7f4c7ad3b69a3da15cbe0c6a62516af899 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 18 May 2021 19:50:10 +0000 Subject: [PATCH 163/293] typo (#2309) --- home.admin/_bootstrap.provision.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_bootstrap.provision.sh index 7a380e8c5..eb3384a2d 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_bootstrap.provision.sh @@ -672,7 +672,7 @@ fi echo "" >> ${logFile} # repair Bitcoin conf if needed -echo "*** Repair Bitcioin Conf (if needed)" >> ${logFile} +echo "*** Repair Bitcoin Conf (if needed)" >> ${logFile} confExists="$(sudo ls /mnt/hdd/${network} | grep -c "${network}.conf")" if [ ${confExists} -eq 0 ]; then echo "Doing init of ${network}.conf" >> ${logFile} From 593fa5e6ee62f881695c1c458e7b0bf78cd6f321 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 18 May 2021 19:53:34 +0000 Subject: [PATCH 164/293] torsocks ssh instruction in the FAQ (#2307) https://github.com/rootzoll/raspiblitz/issues/2273 --- FAQ.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/FAQ.md b/FAQ.md index 26e8f5407..dcc660e62 100644 --- a/FAQ.md +++ b/FAQ.md @@ -56,6 +56,7 @@ - [Why is my node not routing?](#why-is-my-node-not-routing) - [How can I update LND or bitcoind even before the next RaspiBlitz update?](#how-can-i-update-lnd-or-bitcoind-even-before-the-next-raspiblitz-update) - [I cannot connect per SSH to my RaspiBlitz. What can I do?](#i-cannot-connect-per-ssh-to-my-raspiblitz-what-to-do) +- [How to SSH over Tor?](#how-to-ssh-over-tor) - [How do I setup port-forwarding with a SSH tunnel?](#how-to-setup-port-forwarding-with-a-ssh-tunnel) - [How do I setup just a port-forwarding user on my public server?](#how-to-setup-just-a-port-forwarding-user-on-my-public-server) - [How do I connect a UPS to the RaspiBlitz?](#how-to-connect-a-ups-to-the-raspiblitz) @@ -713,6 +714,21 @@ If that doesn't work, try to ping the IP of the RaspiBlitz with `ping [IP-of-Ras If you've checked those and SSH is still not working: Join the conversation on [GitHub Issue #420](https://github.com/rootzoll/raspiblitz/issues/420). +## How to SSH over Tor? + +SSH is already encrypted, why would I want to use it with Tor? +* Remote access when away from LAN. +* Anonymized access - Someone sniffing the traffic don't know where the server you are establishing a connection is, not the server side knows where the client is. + +Create Hidden Service: +`bash /home/admin/config.scripts/internet.hiddenservice.sh ssh 22 22` + +SSH over Tor: +`torsocks ssh admin@HiddenServiceAddress.onion` + +Get the address: +`sudo cat /mnt/hdd/tor/ssh/hostname` + ## How to setup port-forwarding with a SSH tunnel? To use a public server for port-forwarding thru a SSH tunnel you can use the following experimental script on the RaspiBlitz (since v1.2): From ef467b12e58af59121f87796917a1fa86a005e1f Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 18 May 2021 20:00:40 +0000 Subject: [PATCH 165/293] add verify sig link that is on the faq to the readme (#2305) --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e232d89b2..2079856d6 100644 --- a/README.md +++ b/README.md @@ -109,12 +109,17 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.sig)|All of the code, don't trust, verify| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|[Signature file](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.sig) and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| -If downloading the mantainer image, the shasum is: +If downloading the mantainer sd card image: +* GPG 64-bit: 1C73 060C 7C17 6461 * SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f +Which verification method should I used: Hash or Signature? +* Signed file prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project. (Safest) +* Hash function checks file integrity. (Secure) + The mantainer sd card image can also be downloaded via torrent: * [assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent) From d9c90a37bbf6c763837dac133bf04de5976e0704 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 15:41:28 -0500 Subject: [PATCH 166/293] #2302 change restart info --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 +- home.admin/config.scripts/blitz.subscriptions.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index 25d81af11..44b2147b2 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -613,7 +613,7 @@ This looks not like a valid IP. # restart certain services to update urls if "SPHINX" in serviceName: - print("# restarting Sphinx Relay to pickup new public url (please wait) ...") + print("# restarting services to pickup new public url (please wait) ...") os.system("sudo systemctl restart sphinxrelay") time.sleep(8) diff --git a/home.admin/config.scripts/blitz.subscriptions.py b/home.admin/config.scripts/blitz.subscriptions.py index 8792bfc7e..9ddc8a03f 100755 --- a/home.admin/config.scripts/blitz.subscriptions.py +++ b/home.admin/config.scripts/blitz.subscriptions.py @@ -210,7 +210,7 @@ The following additional information is available: time.sleep(3) # trigger restart of relevant services so they can pickup new environment - print("# restarting Sphinx Relay to pickup new public url (please wait) ...") + print("# restarting services to pickup new public url (please wait) ...") os.system("sudo systemctl restart sphinxrelay 2>/dev/null") time.sleep(8) @@ -416,7 +416,7 @@ def main(): # action after possibly new created bride if service_name == SERVICE_SPHINX: - print("# restarting Sphinx Relay to pickup new public url (please wait) ...") + print("# restarting services to pickup new public url (please wait) ...") os.system("sudo systemctl restart sphinxrelay") time.sleep(8) From e838953414e8469491abf338b20f2e957c440bb3 Mon Sep 17 00:00:00 2001 From: Glen Cooper Date: Tue, 18 May 2021 22:50:49 +0000 Subject: [PATCH 167/293] Fix two typos in README.md (#2315) transfere -> transfer connectec -> connected --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2079856d6..09702ba1e 100644 --- a/README.md +++ b/README.md @@ -965,7 +965,7 @@ Before you start migration: * if you have on-chain funds on your old node - make sure to have the backup seed words * if you have lightning channels open on your old node - make sure to have downloaded the latest Static Channel Backup file to your laptop -Also be aware that at the moment RaspiBlitz can only transfere your blockchain and LND wallet data (including channels) over to RaspiBlitz. Any data/pairing of additional apps cannot be transfered and may get lost. +Also be aware that at the moment RaspiBlitz can only transfer your blockchain and LND wallet data (including channels) over to RaspiBlitz. Any data/pairing of additional apps cannot be transfered and may get lost. Instructions for Migration: * shutdown your old node @@ -981,7 +981,7 @@ Now RaspiBlitz should show you that old data from your node was detected and off * Login per SSH as before and reset the passwords (`FINAL RECOVERY LOGIN` on LCD). Then a final reboot will happen. * Login per SSH with your new password A & unlock LND wallet with password C. Now blockchain needs to catch up and then your RaspiBlitz should be ready and show you (under INFO) your on-chain & channel balance. -If you dont have an LCD or HDMI monitor connectec it might be a bit difficult to see what state your RaspiBlitz is in. Just (re-)try to login per SSH again after the reboots (might always take some time until it reacts). +If you dont have an LCD or HDMI monitor connected it might be a bit difficult to see what state your RaspiBlitz is in. Just (re-)try to login per SSH again after the reboots (might always take some time until it reacts). ## Interface / APIs From 554a34701148173e94cdc1669394ad05ffa4cd03 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 18:43:59 -0500 Subject: [PATCH 168/293] fix syntax error --- home.admin/00raspiblitz.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index c5f8f1b43..4d4151f97 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -106,6 +106,7 @@ do echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" exit 1 + fi # for all critical errors (admin info & exit) if [ "${state}" == "errorHDD" ]; then @@ -120,10 +121,8 @@ do echo "command to shutdown --> off" exit 1 else - # every other state just push as event to SSH frontend /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" - fi fi @@ -144,15 +143,14 @@ do ##################################### if [ "${setupPhase}" == "done" ]; then - echo "# AFTER SETUP: Handle System States " - fi # debug wait sleep 3 done + echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal" echo "***********************************" echo "* RaspiBlitz Commandline" From 9f90fd93940ec8abc1cd92abcd3d0d95b2fb06a5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 18:46:14 -0500 Subject: [PATCH 169/293] debug output --- home.admin/00raspiblitz.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4d4151f97..89b50b33b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -122,6 +122,8 @@ do exit 1 else # every other state just push as event to SSH frontend + echo "${state} ${message}" + sleep 3 /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" fi From c5ceb17bb2506fe7024a3671cacc98f3635f0dee Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 18:48:51 -0500 Subject: [PATCH 170/293] fix scripts for no HDD --- home.admin/config.scripts/blitz.statusscan.sh | 2 +- home.admin/config.scripts/blitz.ups.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index ff6b5c927..2d20cc2d1 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -1,7 +1,7 @@ #!/bin/bash source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf +source /mnt/hdd/raspiblitz.conf 2>/dev/null # command info if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then diff --git a/home.admin/config.scripts/blitz.ups.sh b/home.admin/config.scripts/blitz.ups.sh index db6b9cdfe..5a34fdadc 100755 --- a/home.admin/config.scripts/blitz.ups.sh +++ b/home.admin/config.scripts/blitz.ups.sh @@ -1,7 +1,7 @@ #!/bin/bash source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf +source /mnt/hdd/raspiblitz.conf 2>/dev/null # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From 08bb55996361911a322dd600841913b271213e6c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 20:55:18 -0500 Subject: [PATCH 171/293] add hardware info tool --- home.admin/config.scripts/blitz.hardware.sh | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 home.admin/config.scripts/blitz.hardware.sh diff --git a/home.admin/config.scripts/blitz.hardware.sh b/home.admin/config.scripts/blitz.hardware.sh new file mode 100644 index 000000000..d48b70598 --- /dev/null +++ b/home.admin/config.scripts/blitz.hardware.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "Hardware Tool Script" + echo "blitz.hardware.sh [status]" + exit 1 +fi + +######################## +# GATHER HARDWARE INFO +####################### + +# detect known SBCs +board="" +isRaspberryPi4=$(cat /proc/device-tree/model | grep -c "Raspberry Pi 4") +if [ "${isRaspberryPi4}" == "1" ]; then + board="rp4" +fi + +# get how many RAM (in MB) +ramMB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo) + + +######################## +# OUTPUT HARDWARE INFO +####################### + +if [ "$1" = "status" ]; then + echo "board='${board}'" + echo "ramMB=${ramMB}" +fi From 6ddfc89e5abccd6dbf6c9fdb5e31056c124ca1d9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:01:01 -0500 Subject: [PATCH 172/293] add gb ram info --- home.admin/config.scripts/blitz.hardware.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/config.scripts/blitz.hardware.sh b/home.admin/config.scripts/blitz.hardware.sh index d48b70598..ed91f486f 100644 --- a/home.admin/config.scripts/blitz.hardware.sh +++ b/home.admin/config.scripts/blitz.hardware.sh @@ -21,6 +21,8 @@ fi # get how many RAM (in MB) ramMB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo) +# get how many RAM (in GB - approx) +ramGB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 9500000 )}' /proc/meminfo) ######################## # OUTPUT HARDWARE INFO @@ -29,4 +31,5 @@ ramMB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo) if [ "$1" = "status" ]; then echo "board='${board}'" echo "ramMB=${ramMB}" + echo "ramGB=${ramGB}" fi From b35f9b55cf9bf65013398dd13d7520012636c475 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:02:00 -0500 Subject: [PATCH 173/293] fix ram GB detection --- home.admin/config.scripts/blitz.hardware.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.hardware.sh b/home.admin/config.scripts/blitz.hardware.sh index ed91f486f..dbc30baab 100644 --- a/home.admin/config.scripts/blitz.hardware.sh +++ b/home.admin/config.scripts/blitz.hardware.sh @@ -22,7 +22,7 @@ fi ramMB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo) # get how many RAM (in GB - approx) -ramGB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 9500000 )}' /proc/meminfo) +ramGB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 950000 )}' /proc/meminfo) ######################## # OUTPUT HARDWARE INFO From 75cc987767fcb79011b56d8cea803e98507a2f87 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:05:35 -0500 Subject: [PATCH 174/293] add board & ram info --- home.admin/_bootstrap.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 6a58876ce..b7323488c 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -58,12 +58,17 @@ source ${configFile} 2>/dev/null # get first basic network info source <(/home/admin/config.scripts/internet.sh status) +# get basic hardware info +source <(/home/admin/config.scripts/internet.sh status) + # resetting info file echo "Resetting the InfoFile: ${infoFile}" echo "state=starting" > $infoFile echo "message=" >> $infoFile echo "baseimage=${baseimage}" >> $infoFile echo "cpu=${cpu}" >> $infoFile +echo "board=${board}" >> $infoFile +echo "ramMB=${ramMB}" >> $infoFile echo "network=${network}" >> $infoFile echo "chain=${chain}" >> $infoFile echo "localip='${localip}'" >> $infoFile From 3c69e7174dff671d361b8ed905c796d17e3aaa46 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:06:32 -0500 Subject: [PATCH 175/293] add noHDD state --- home.admin/setup.scripts/eventInfoWait.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 3d1e199a6..9a704bfc1 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -86,12 +86,20 @@ Checking HDD/SSD ... Please wait. " 6 26 +elif [ "${eventID}" == "noHDD" ]; then + + # contentWords[1] --> size string (for example '1TB') + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Please connect a HDD/SSD. +Minimum of ${contentWords[1]} needed. +" 7 40 + elif [ "${eventID}" == "sdtoosmall" ]; then # contentWords[1] --> size string (for example '16GB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " PROBLEM: SD CARD IS TOO SMALL -Minumum of ${contentWords[1]} needed +Minimum of ${contentWords[1]} needed Cut power & create fresh sd card " 8 40 From b342d6f6c237c7afa8650ee7537e64795a6e09c7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:12:02 -0500 Subject: [PATCH 176/293] remove debug --- home.admin/00raspiblitz.sh | 2 -- home.admin/setup.scripts/eventInfoWait.sh | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 89b50b33b..4d4151f97 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -122,8 +122,6 @@ do exit 1 else # every other state just push as event to SSH frontend - echo "${state} ${message}" - sleep 3 /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" fi diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 9a704bfc1..84e529340 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -22,7 +22,7 @@ contentWords=($2) contentString=$2 # default backtitle for dialog -backtitle="RaspiBlitz ${codeVersion} / ${localip}" +backtitle="RaspiBlitz ${codeVersion} / ${localip} / ${eventID}" ################################################ # 1) WELL DEFINED EVENTS @@ -91,7 +91,7 @@ elif [ "${eventID}" == "noHDD" ]; then # contentWords[1] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Please connect a HDD/SSD. -Minimum of ${contentWords[1]} needed. +Minimum of ${contentWords[0]} needed. " 7 40 elif [ "${eventID}" == "sdtoosmall" ]; then From 4ac21f3d65055305b1f5d640cf09695c9ab3afe7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:13:52 -0500 Subject: [PATCH 177/293] change hdd info --- home.admin/_bootstrap.sh | 2 +- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b7323488c..eded1f2fa 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -263,7 +263,7 @@ do sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} - sed -i "s/^message=.*/message='1TB'/g" ${infoFile} + sed -i "s/^message=.*/message='>500GB'/g" ${infoFile} fi # get latest network info & update raspiblitz.info (in case network changes) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 84e529340..0ec704567 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -92,7 +92,7 @@ elif [ "${eventID}" == "noHDD" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Please connect a HDD/SSD. Minimum of ${contentWords[0]} needed. -" 7 40 +" 6 35 elif [ "${eventID}" == "sdtoosmall" ]; then From 597b3e8dc891f18fb0df605d1b19924fc86c8d17 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:15:48 -0500 Subject: [PATCH 178/293] cange noHDD text --- home.admin/setup.scripts/eventInfoWait.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 0ec704567..d498ad5a3 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -90,9 +90,10 @@ elif [ "${eventID}" == "noHDD" ]; then # contentWords[1] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Please connect a HDD/SSD. -Minimum of ${contentWords[0]} needed. -" 6 35 +Waiting for HDD/SSD ... +Please connect a ${contentWords[0]} +HDD or SSD to the device. +" 8 35 elif [ "${eventID}" == "sdtoosmall" ]; then From 9f22d4d49461f4b7547e734c9d41f8fd7897e57e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 18 May 2021 21:16:34 -0500 Subject: [PATCH 179/293] change dialog layout --- home.admin/setup.scripts/eventInfoWait.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d498ad5a3..e5c599c15 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -93,16 +93,16 @@ elif [ "${eventID}" == "noHDD" ]; then Waiting for HDD/SSD ... Please connect a ${contentWords[0]} HDD or SSD to the device. -" 8 35 +" 7 35 elif [ "${eventID}" == "sdtoosmall" ]; then # contentWords[1] --> size string (for example '16GB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " PROBLEM: SD CARD IS TOO SMALL -Minimum of ${contentWords[1]} needed +Minimum of ${contentWords[0]} needed Cut power & create fresh sd card -" 8 40 +" 7 40 ################################################ # 2) GENERIC EVENT From 63ab4503ab3e0b0344d52845f8f2c44b61f3aa09 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 12:51:17 -0500 Subject: [PATCH 180/293] add thried parameter for mode --- home.admin/setup.scripts/eventInfoWait.sh | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index e5c599c15..6212c32c2 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -21,6 +21,16 @@ fi contentWords=($2) contentString=$2 +# 3rd PARAMETER (optional): Place of display - could be "lcd" or "ssh" (defalt) +displayMode=$3 +if [ "${displayMode}" == "" ]; then + displayMode="ssh" +fi +if && [ "${displayMode}" != "lcd" ] && [ "${displayMode}" != "ssh" ]; then + echo "error='unknown 3rd parameter value'" + exit 1 +fi + # default backtitle for dialog backtitle="RaspiBlitz ${codeVersion} / ${localip} / ${eventID}" @@ -41,6 +51,12 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 +elif [ "${eventID}" == "shutdown" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Shutting down - please wait. +" 5 35 + elif [ "${eventID}" == "noDHCP" ]; then # this event is mostly for LCD/HDMI display @@ -88,16 +104,25 @@ Please wait. elif [ "${eventID}" == "noHDD" ]; then - # contentWords[1] --> size string (for example '1TB') + # contentWords[0] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Waiting for HDD/SSD ... Please connect a ${contentWords[0]} HDD or SSD to the device. " 7 35 +elif [ "${eventID}" == "erroHDD" ]; then + + # contentString --> detail error message + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +PROBLEM: FAILED HDD/SSD +Detailed Error Message: +${contentString} +" 7 35 + elif [ "${eventID}" == "sdtoosmall" ]; then - # contentWords[1] --> size string (for example '16GB') + # contentWords[0] --> size string (for example '16GB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " PROBLEM: SD CARD IS TOO SMALL Minimum of ${contentWords[0]} needed From 1763afbf5460c369d1ebf989f148449754b77a16 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 14:21:20 -0500 Subject: [PATCH 181/293] remove presync phase --- home.admin/_bootstrap.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index eded1f2fa..a660ef574 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -365,9 +365,6 @@ if [ ${isMounted} -eq 0 ]; then elif [ "${hddGotMigrationData}" != "" ]; then infoMessage="Please Login for Migration" setupPhase="migration" - elif [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then - infoMessage="Login for presynced Setup" - setupPhase="presync" fi # signal "WAIT LOOP: SETUP" to LCD, SSH & WEBAPI From 43878b1bb592e0fcdfa1e99bcdffd2ba57e4e03b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 19:38:34 -0500 Subject: [PATCH 182/293] refactor state displaying of LCD --- home.admin/00infoLCD.sh | 239 +--------------------- home.admin/80scanLND.sh | 24 --- home.admin/setup.scripts/eventInfoWait.sh | 42 ++++ 3 files changed, 49 insertions(+), 256 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index ab3f44166..cfd7dfbc7 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -20,6 +20,8 @@ function usage() { verbose=0 pause=12 +# this is used by touchscreen and command 'satus' +# TODO: remove on v1.8 while [[ "$1" == -* ]]; do case "$1" in -h|--help) @@ -84,227 +86,17 @@ while : # get config info if already available (with state value) source ${infoFile} - configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') - if [ ${configExists} -eq 1 ]; then - source ${configFile} - fi - # reboot info - if [ "${state}" = "reboot" ]; then - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Reboot ..." 3 30 - sleep 20 - continue - fi + if [ "${setupPhase}" != "ready" ]; then - # shutdown info - if [ "${state}" = "shutdown" ]; then - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Shutdown ..." 3 30 - sleep 20 - continue - fi - - # make sure no local ip is readable - if [ "${localip}" == "" ]; then localip="no-network"; fi - - # waiting for DHCP in general - if [ "${state}" = "noHDD" ]; then - l1="Waiting for HDD/SSD ...\n" - l2="Please connect a >500GB\n" - l3="HDD or SSD to the device.\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + # show status info during boot & setup & repair on LCD + /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" lcd sleep 1 continue + fi - # waiting for DHCP in general - if [ "${state}" = "noDHCP" ]; then - l1="Waiting for DHCP ...\n" - l2="Not able to get local IP.\n" - l3="Check you router if constant.\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 - sleep 1 - continue - fi - - # waiting for local IP - if [ "${state}" = "noIP-LAN" ] || [ "${state}" = "noIP-WIFI" ]; then - l1="Waiting for Network ...\n" - l2="Not able to get local IP.\n" - l3="LAN cable connected? WIFI lost?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 - sleep 1 - continue - fi - - # waiting for Internet - if [ "${state}" = "noInternet" ]; then - l1="Waiting for Internet ...\n" - l2="Local Network seems OK but no Internet.\n" - l3="Is router still online?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 - sleep 1 - continue - fi - - # waiting for Intrenet - if [ "${state}" = "noInternet" ]; then - l1="Waiting for Internet ...\n" - l2="Local Network seems OK but no Internet.\n" - l3="Is router still online?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 - sleep 1 - continue - fi - - # waiting for DHCP in general - if [ "${state}" = "sdtoosmall" ]; then - l1="SD card is too small.\n" - l2="Please use 16GB or bigger.\n" - l3="Its safe to cut power now.\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 - sleep 1 - continue - fi - - # if no information available from files - set default - if [ ${#setupStep} -eq 0 ]; then - setupStep=0 - fi - - # before setup even started - if [ ${setupStep} -eq 0 ]; then - - # when in presync - get more info on progress - if [ "${state}" = "presync" ]; then - blockchaininfo="$(sudo -u root bitcoin-cli --conf=/home/admin/assets/bitcoin.conf getblockchaininfo 2>/dev/null)" - message="starting" - if [ ${#blockchaininfo} -gt 0 ]; then - message="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')" - message=$(echo $message | awk '{printf( "%.2f%%", 100 * $1)}') - fi - fi - - # setup process has not started yet - l1="Login to your RaspiBlitz with:\n" - l2="ssh admin@${localip}\n" - l3="Use password: raspiblitz\n" - - if [ "${state}" = "errorHDD" ]; then - l1="HDD Error: ${message}\n" - fi - - if [ "${state}" = "recovering" ]; then - l1="Recovering please wait ..\n" - fi - - boxwidth=$((${#localip} + 24)) - sleep 3 - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) - ${message}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 5 - continue - fi - - # check if recovering/upgrade is running - if [ "${state}" = "recovering" ]; then - if [ ${#message} -eq 0 ]; then - message="Setup in Progress" - fi - l1="Upgrade/Recover/Provision\n" - l2="---> ${message}\n" - l3="Please keep running until reboot." - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # if freshly recovered - recoveredInfoExists=$(sudo ls /home/admin/recover.flag 2>/dev/null | grep -c '.flag') - if [ ${recoveredInfoExists} -gt 0 ]; then - l1="FINAL RECOVER LOGIN NEEDED:\n" - l2="ssh admin@${localip}\n" - l3="Use password: raspiblitz\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # if re-indexing - if [ "${state}" = "reindex" ]; then - l1="REINDEXING BLOCKCHAIN\n" - l2="To monitor & detect finish:\n" - l3="ssh admin@${localip}\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # when setup is in progress - password has been changed - if [ ${setupStep} -lt 100 ]; then - l1="Login to your RaspiBlitz with:\n" - l2="ssh admin@${localip}\n" - l3="Use your Password A\n" - boxwidth=$((${#localip} + 24)) - sleep 3 - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip} - Welcome (${setupStep})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 7 - continue - fi - - ########################### - # DISPLAY AFTER SETUP - ########################### - - if [ "${state}" = "repair" ]; then - l1="Repair Mode\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "reboot" ]; then - l1="Reboot needed.\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "retorrent" ]; then - l1="Repair Mode- TORRENT\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "recopy" ]; then - l1="Repair Mode - COPY\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "copystation" ]; then - l1="COPY STATION MODE\n" - l2="${message}" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2" 6 56 - sleep 2 - continue - fi - + # TODO: ALSO SEPERATE GUI/ACTION FOR THE SCANNING / WALLET UNLOCK / ERROR DETECTION # if LND is syncing or scanning lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true) if [ ${lndSynced} -eq 0 ]; then @@ -313,23 +105,6 @@ while : continue fi - # perform config check - configCheck=$(/home/admin/config.scripts/blitz.configcheck.py) - if [ $? -eq 0 ]; then - configValid=1 - # echo "Config Valid!" - else - configValid=0 - # echo "Config Not Valid!" - l1="POTENTIAL CONFIG ERROR FOUND\n" - l2="ssh admin@${localip}\n" - l3="use Password A\n" - l4="Run on Terminal command: check" - dialog --backtitle "RaspiBlitz ${codeVersion} cfg-err ${localip}" --infobox "$l1$l2$l3$l4" 6 50 - sleep 20 - continue - fi - # no special case - show status display /home/admin/00infoBlitz.sh sleep 5 diff --git a/home.admin/80scanLND.sh b/home.admin/80scanLND.sh index e269d0a49..38a8065c9 100755 --- a/home.admin/80scanLND.sh +++ b/home.admin/80scanLND.sh @@ -19,33 +19,9 @@ if [ "$USER" == "admin" ]; then adminStr="Use CTRL+c to EXIT to Terminal" fi -# waiting for Internet connection -if [ "${state}" = "nointernet" ]; then - l1="Waiting for Internet ...\n" - l2="Please check infrastructure:\n" - l3="Router online? Network connected?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - exit 0 -fi - # bitcoin errors always first if [ ${bitcoinActive} -eq 0 ] || [ ${#bitcoinErrorFull} -gt 0 ] || [ "${1}" == "blockchain-error" ]; then - #################### - # Copy Blockchain Source Mode - # https://github.com/rootzoll/raspiblitz/issues/1081 - #################### - - if [ "${state}" = "copysource" ]; then - l1="Copy Blockchain Source Modus\n" - l2="May needs restart node when done.\n" - l3="Restart from Terminal: restart" - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${localIP}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - exit 1 - fi - #################### # On Bitcoin Error #################### diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 6212c32c2..cbfa23a61 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -51,6 +51,48 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 +elif [ "${eventID}" == "recovering" ] && [ "${mode}" == "lcd" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Upgrade/Recover/Provision +---> ${contentString} +Please keep running until reboot. +" 6 24 + +elif [ "${eventID}" == "repair" ] && [ "${mode}" == "lcd" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Repair-Mode - Login for Details: +ssh admin@${localip} +Use your Password A +" 7 41 + +elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "lcd" ]; then + + if [ "${setupPhase}" == "setup"] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "migration" ]; then + + # show default login help info + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Login to your RaspiBlitz with: +ssh admin@${localip} +Use password: raspiblitz +" 7 41 + + else + + # on all other cases (add info message) + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Login for Maintenance: +---> ${contentString} +ssh admin@${localip} +Use password: raspiblitz +" 8 41 + fi + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Shutting down for reboot. +" 5 30 + elif [ "${eventID}" == "shutdown" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " From 7c9062e4907c2695796b3c062df6a32ffe831226 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 19:45:11 -0500 Subject: [PATCH 183/293] fix syntax --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index cbfa23a61..2ecec575f 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -26,7 +26,7 @@ displayMode=$3 if [ "${displayMode}" == "" ]; then displayMode="ssh" fi -if && [ "${displayMode}" != "lcd" ] && [ "${displayMode}" != "ssh" ]; then +if [ "${displayMode}" != "lcd" ] && [ "${displayMode}" != "ssh" ]; then echo "error='unknown 3rd parameter value'" exit 1 fi From b8d7d0c9739cae2e5e88a173d28a865cc07d61d5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 19:53:57 -0500 Subject: [PATCH 184/293] fix mode --- home.admin/setup.scripts/eventInfoWait.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 2ecec575f..88d18c909 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -22,11 +22,11 @@ contentWords=($2) contentString=$2 # 3rd PARAMETER (optional): Place of display - could be "lcd" or "ssh" (defalt) -displayMode=$3 -if [ "${displayMode}" == "" ]; then - displayMode="ssh" +mode=$3 +if [ "${mode}" == "" ]; then + mode="ssh" fi -if [ "${displayMode}" != "lcd" ] && [ "${displayMode}" != "ssh" ]; then +if [ "${mode}" != "lcd" ] && [ "${mode}" != "ssh" ]; then echo "error='unknown 3rd parameter value'" exit 1 fi @@ -110,6 +110,13 @@ If this takes too long please check your connection to internet router. " 7 41 +elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "ssh" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Preparing Setup +Please wait ... +" 6 24 + elif [ "${eventID}" = "noIP-LAN" ] || [ "${eventID}" = "noIP-WIFI" ]; then # this event is mostly for LCD/HDMI display From 3088506b2ff55510ebd974e8f818364bcfe9eb5e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 19 May 2021 19:55:34 -0500 Subject: [PATCH 185/293] fix lcd wait setup --- home.admin/setup.scripts/eventInfoWait.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 88d18c909..da5da1f83 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -89,10 +89,6 @@ Use password: raspiblitz " 8 41 fi - dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Shutting down for reboot. -" 5 30 - elif [ "${eventID}" == "shutdown" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " From 0f27b4378923e9c23f469882ed79b836c37a20af Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 20 May 2021 21:13:35 -0500 Subject: [PATCH 186/293] check break loop --- home.admin/00raspiblitz.sh | 46 +++++++++++-------- home.admin/_bootstrap.sh | 7 ++- .../setup.scripts/setupDialogControl.sh | 4 ++ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4d4151f97..afbbc654f 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,4 +1,10 @@ #!/bin/bash + +####################################### +# SSH USER INTERFACE +# gets called when user logins per SSH +# or calls 'raspiblitz' on the terminal +####################################### echo "Starting SSH user interface ..." # CONFIGFILE - configuration of RaspiBlitz @@ -27,10 +33,6 @@ if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then exit 1 fi -##################################### -# SSH MENU LOOP -##################################### - # prepare status file # TODO: this is to be replaced and unified together with raspiblitz.info # when we move to a background monitoring thread & redis for WebUI with v1.8 @@ -38,15 +40,32 @@ sudo touch /var/cache/raspiblitz/raspiblitz.status sudo chown admin:admin /var/cache/raspiblitz/raspiblitz.status sudo chmod 740 /var/cache/raspiblitz/raspiblitz.status +##################################### +# SSH MENU LOOP +# this loop runs until user exits or +# an error drops user to terminal +##################################### + exitMenuLoop=0 while [ ${exitMenuLoop} -eq 0 ] do ##################################### - # SETUP SSH MENU + # Access fresh system info on every loop + + # refresh system state information + source ${infoFile} + + # gather fresh status scan and store results in memory + # TODO: move this into background loop and unify with redis data storage later + sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status + source /var/cache/raspiblitz/raspiblitz.status + + ##################################### + # SETUP MENU ##################################### - # if setup is done & state is ready .. jump to main menu + # when is needed & bootstrap process signals that it waits for user dialog if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then # push user to main menu /home/admin/setup.scripts/setupDialogControl.sh @@ -57,10 +76,10 @@ do fi ##################################### - # MAIN SSH MENU + # MAIN MENU ##################################### - # if setup is done & state is ready .. jump to main menu + # when setup is done & state is ready .. jump to main menu if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then # push user to main menu /home/admin/00mainMenu.sh @@ -70,17 +89,6 @@ do if [ "${exitMenuLoop}" != "0" ]; then break; fi fi - ##################################### - # Access fresh system info - - # refresh system state information - source ${infoFile} - - # gather fresh status scan and store results in memory - # TODO: move this into background loop and unify with redis data storage later - sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status - source /var/cache/raspiblitz/raspiblitz.status - ##################################### # DURING SETUP: Handle System States ##################################### diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index a660ef574..45acabd37 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -378,8 +378,7 @@ if [ ${isMounted} -eq 0 ]; then # until SSH or WEBUI setup data is available ############################################# - gotUserSetupInfo=0 - until [ ${gotUserSetupInfo} -eq 1 ] + until [ "${state}" == "waitprovision" ] do # TODO: DETECT WHEN USER SETUP IS DONE @@ -405,6 +404,10 @@ if [ ${isMounted} -eq 0 ]; then # give the loop a little bed time sleep 4 + # check info file for updated values + # especially the state for checking loop + source ${infoFile} + done ############################### TODO: RE-ARRANGE THE PARTS BELOW diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index eae985005..7a25276aa 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -123,6 +123,7 @@ if [ "${migrationOS}" == "" ]; then # source the setup state fresh source $SETUPFILE + # write basic config file data echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE echo "lcdrotate=1" >> $CONFIGFILE @@ -131,6 +132,9 @@ if [ "${migrationOS}" == "" ]; then echo "chain=main" >> $CONFIGFILE echo "runBehindTor=on" >> $CONFIGFILE + # set flag for bootstrap process to kick-off provision process + sudo sed -i "s/^state=.*/state=waitprovision/g" /home/admin/raspiblitz.info + else ############################################ From 5c37feabc6d036aa4f1315018615d467a2f1f411 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 20 May 2021 21:36:23 -0500 Subject: [PATCH 187/293] adding wait provision --- home.admin/setup.scripts/eventInfoWait.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index da5da1f83..ff1f53e93 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -113,6 +113,13 @@ Preparing Setup Please wait ... " 6 24 +elif [ "${eventID}" == "waitprovision" ] && [ "${mode}" == "ssh" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Preparing Provision +Please wait ... +" 6 24 + elif [ "${eventID}" = "noIP-LAN" ] || [ "${eventID}" = "noIP-WIFI" ]; then # this event is mostly for LCD/HDMI display From 674a473027bef9a470ab3dd049e87a3046700e60 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 20 May 2021 21:37:52 -0500 Subject: [PATCH 188/293] also show ait provison on lcd --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index ff1f53e93..308e71db0 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -113,7 +113,7 @@ Preparing Setup Please wait ... " 6 24 -elif [ "${eventID}" == "waitprovision" ] && [ "${mode}" == "ssh" ]; then +elif [ "${eventID}" == "waitprovision" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Preparing Provision From 6238e5357ca13c644904a9c8a4a824951dd541fd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 20 May 2021 22:52:31 -0500 Subject: [PATCH 189/293] kickstart provision --- home.admin/_bootstrap.sh | 224 +++++------------- .../setup.scripts/setupDialogControl.sh | 2 +- 2 files changed, 62 insertions(+), 164 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 45acabd37..e9adf26fb 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -1,8 +1,7 @@ #!/bin/bash # This script runs on every start called by boostrap.service -# It makes sure that the system is configured like the -# default values or as in the config. +# see logs with --> tail -n 100 /home/admin/raspiblitz.log ################################ # BASIC SETTINGS @@ -352,6 +351,12 @@ source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) # check if the HDD is auto-mounted ( auto-mounted = setup-done) echo "HDD already part of system: $isMounted" >> $logFile + +############################ +############################ +# WHEN SETUP IS NEEDED +############################ + if [ ${isMounted} -eq 0 ]; then echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile @@ -408,12 +413,10 @@ if [ ${isMounted} -eq 0 ]; then # especially the state for checking loop source ${infoFile} -done - -############################### TODO: RE-ARRANGE THE PARTS BELOW -echo "TODO: RE-ARRANGE THE PARTS BELOW" >> $logFile -exit 0 + done + echo "DEBUG ls /mnt/hdd/raspiblitz.conf" >> $logFile + ls /mnt/hdd/raspiblitz.conf >> $logFile # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile @@ -422,81 +425,48 @@ exit 0 else source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) fi - if [ ${#error} -gt 0 ]; then - echo "Failed to tempmount the HDD .. awaiting user setup." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='${error}'/g" ${infoFile} - exit 0 - fi # make sure all links between directories/drives are correct echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link - # check if HDD contains already a configuration - configExists=$(ls ${configFile} | grep -c '.conf') - echo "HDD contains already a configuration: ${configExists}" >> $logFile - if [ ${configExists} -eq 1 ]; then - echo "Found existing configuration" >> $logFile - source ${configFile} - # check if config files contains basic: version - if [ ${#raspiBlitzVersion} -eq 0 ]; then - echo "Invalid Config: missing raspiBlitzVersion in (${configFile})!" >> ${logFile} - configExists=0 - fi - # check if config files contains basic: network - if [ ${#network} -eq 0 ]; then - echo "Invalid Config: missing network in (${configFile})!" >> ${logFile} - configExists=0 - fi - # check if config files contains basic: chain - if [ ${#chain} -eq 0 ]; then - echo "Invalid Config: missing chain in (${configFile})!" >> ${logFile} - configExists=0 - fi - if [ ${configExists} -eq 0 ]; then - echo "Moving invalid config to raspiblitz.invalid.conf" >> ${logFile} - sudo mv ${configFile} /mnt/hdd/raspiblitz.invalid.conf 2>/dev/null - fi - fi - - # UPDATE MIGRATION & CONFIG PROVISIONING - if [ ${configExists} -eq 1 ]; then - echo "Found valid configuration" >> $logFile - sed -i "s/^state=.*/state=recovering/g" ${infoFile} - sed -i "s/^message=.*/message='Starting Recover'/g" ${infoFile} - sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} - sed -i "s/^network=.*/network=${network}/g" ${infoFile} - echo "Calling Data Migration .." >> $logFile - sudo /home/admin/_bootstrap.migration.sh - echo "Calling Provisioning .." >> $logFile - sudo /home/admin/_bootstrap.provision.sh - sed -i "s/^state=.*/state=reboot/g" ${infoFile} - sed -i "s/^message=.*/message='Done Recover'/g" ${infoFile} - echo "rebooting" >> $logFile - # set flag that system is freshly recovered and needs setup dialogs - sudo touch /home/admin/recover.flag - echo "state=recovered" >> /home/admin/recover.flag - echo "shutdown in 1min" >> $logFile - # save log file for inspection before reboot - echo "REBOOT FOR SSH CERTS RESET ..." >> $logFile - sudo cp ${logFile} ${logFile}.recover - sync - sudo shutdown -r -F -t 60 - exit 0 - else - echo "OK - No config file found: ${configFile}" >> $logFile - fi + # kick-off provision process + sed -i "s/^state=.*/state=recovering/g" ${infoFile} + sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} + #sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} + #sed -i "s/^network=.*/network=${network}/g" ${infoFile} + echo "Calling Data Migration .." >> $logFile + sudo /home/admin/_bootstrap.migration.sh + echo "Calling Provisioning .." >> $logFile + sudo /home/admin/_bootstrap.provision.sh + sed -i "s/^state=.*/state=reboot/g" ${infoFile} + sed -i "s/^message=.*/message='Done Provision'/g" ${infoFile} + + # PROCESS raspiblitz.setup + echo "TODO: After Provision Handling .." >> $logFile + + # handle possible errors + # set passwords + # show seed words - # if it got until here: HDD is empty ext4 - echo "Waiting for SetUp." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='HDD needs SetUp (2)'/g" ${infoFile} - # unmount HDD to be ready for auto-mount during setup - sudo umount -l /mnt/hdd exit 0 -fi # END - no automount - after this HDD is mounted + + echo "rebooting" >> $logFile + echo "state=recovered" >> /home/admin/recover.flag + echo "shutdown in 1min" >> $logFile + # save log file for inspection before reboot + sudo cp ${logFile} ${logFile}.recover + sync + sudo shutdown -r -F -t 60 + exit 0 + +fi + +############################ +############################ +# NORMAL START BOOTSTRAP +############################ sed -i "s/^setupPhase=.*/setupPhase='starting'/g" ${infoFile} @@ -507,66 +477,26 @@ if [ ${configWifiExists} -eq 1 ]; then sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf fi -# config should exist now -configExists=$(ls ${configFile} | grep -c '.conf') -if [ ${configExists} -eq 0 ]; then - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='no config'/g" ${infoFile} - exit 0 +# make sure lndAddress & lndPort exist in cofigfile +valueExists=$(cat ${configFile} | grep -c 'lndPort=') +if [ ${valueExists} -eq 0 ]; then + lndPort=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep "^listen=*" | cut -f2 -d':') + if [ ${#lndPort} -eq 0 ]; then + lndPort="9735" + fi + echo "lndPort='${lndPort}'" >> ${configFile} +fi +valueExists=$(cat ${configFile} | grep -c 'lndAddress=') +if [ ${valueExists} -eq 0 ]; then + echo "lndAddress=''" >> ${configFile} fi -##################################### -# UPDATE HDD CONFIG FILE (if exists) -# needs to be done before starting LND -# so that environment info is fresh -##################################### +# load data from config file fresh +echo "load configfile data" >> $logFile +source ${configFile} -echo "Check if HDD contains configuration .." >> $logFile -configExists=$(ls ${configFile} | grep -c '.conf') -if [ ${configExists} -eq 1 ]; then - - # make sure lndAddress & lndPort exist - valueExists=$(cat ${configFile} | grep -c 'lndPort=') - if [ ${valueExists} -eq 0 ]; then - lndPort=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep "^listen=*" | cut -f2 -d':') - if [ ${#lndPort} -eq 0 ]; then - lndPort="9735" - fi - echo "lndPort='${lndPort}'" >> ${configFile} - fi - valueExists=$(cat ${configFile} | grep -c 'lndAddress=') - if [ ${valueExists} -eq 0 ]; then - echo "lndAddress=''" >> ${configFile} - fi - - # load values - echo "load and update publicIP" >> $logFile - source ${configFile} - - # if not running TOR before starting LND internet connection with a valid public IP is needed - waitForPublicIP=1 - if [ "${runBehindTor}" = "on" ] || [ "${runBehindTor}" = "1" ]; then - echo "# no need to wait for internet - public Tor address already known" >> $logFile - waitForPublicIP=0 - fi - while [ ${waitForPublicIP} -eq 1 ] - do - source <(/home/admin/config.scripts/internet.sh status) - if [ ${online} -eq 0 ]; then - echo "# (loop) waiting for internet ... " >> $logFile - sed -i "s/^state=.*/state=nointernet/g" ${infoFile} - sed -i "s/^message=.*/message='Waiting for Internet'/g" ${infoFile} - sleep 3 - else - echo "# OK internet detected ... continue" >> $logFile - waitForPublicIP=0 - fi - done - - # update public IP on boot - set to domain is available - /home/admin/config.scripts/internet.sh update-publicip ${lndAddress} - -fi +# update public IP on boot - set to domain if available +/home/admin/config.scripts/internet.sh update-publicip ${lndAddress} ###################################################################### # MAKE SURE LND RPC/REST ports are standard & open to all connections @@ -614,17 +544,6 @@ else echo "No additional backup device was configured." >> $logFile fi -################################ -# DETECT FRESHLY RECOVERED SD -################################ - -recoveredInfoExists=$(ls /home/admin/recover.flag | grep -c '.flag') -if [ ${recoveredInfoExists} -eq 1 ]; then - sed -i "s/^state=.*/state=recovered/g" ${infoFile} - sed -i "s/^message=.*/message='login to finish'/g" ${infoFile} - exit 0 -fi - ################################ # SD INFOFILE BASICS ################################ @@ -633,27 +552,6 @@ fi sed -i "s/^state=.*/state=ready/g" ${infoFile} sed -i "s/^message=.*/message='waiting login'/g" ${infoFile} -# determine network and chain from system - -# check for BITCOIN -loaded=$(sudo systemctl status bitcoind | grep -c 'loaded') -if [ ${loaded} -gt 0 ]; then - sed -i "s/^network=.*/network=bitcoin/g" ${infoFile} - source /mnt/hdd/bitcoin/bitcoin.conf >/dev/null 2>&1 - if [ ${testnet} -gt 0 ]; then - sed -i "s/^chain=.*/chain=test/g" ${infoFile} - else - sed -i "s/^chain=.*/chain=main/g" ${infoFile} - fi -fi - -# check for LITECOIN -loaded=$(sudo systemctl status litecoind | grep -c 'loaded') -if [ ${loaded} -gt 0 ]; then - sed -i "s/^network=.*/network=litecoin/g" ${infoFile} - sed -i "s/^chain=.*/chain=main/g" ${infoFile} -fi - ################################ # DELETE LOG & LOCK FILES ################################ diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 7a25276aa..2534c064a 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -112,7 +112,7 @@ if [ "${migrationOS}" == "" ]; then echo "# CREATING raspiblitz.conf from your setup choices" # prepate config file - CONFIGFILE="/mnt/hdd/raspiblitz.conf.tmp" + CONFIGFILE="/mnt/hdd/raspiblitz.conf" sudo rm $CONFIGFILE 2>/dev/null sudo chown admin:admin $CONFIGFILE sudo chmod 777 $CONFIGFILE From 69ca1e07e5fea01d634d4649f9cfb2cc8cbe60bd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 11:08:33 -0500 Subject: [PATCH 190/293] show raspi version also when mounted --- home.admin/config.scripts/blitz.datadrive.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 43fa958e2..845693411 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -207,7 +207,7 @@ if [ "$1" = "status" ]; then # check for recoverable RaspiBlitz data (if config file exists) and raid hddRaspiData=$(sudo ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf) - isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") + #isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") echo "hddRaspiData=${hddRaspiData}" hddRaspiVersion="" if [ ${hddRaspiData} -eq 1 ]; then @@ -316,6 +316,12 @@ if [ "$1" = "status" ]; then fi hddRaspiData=$(sudo ls -l /mnt/hdd | grep -c raspiblitz.conf) echo "hddRaspiData=${hddRaspiData}" + hddRaspiVersion="" + if [ ${hddRaspiData} -eq 1 ]; then + source /mnt/hdd/raspiblitz.conf + hddRaspiVersion="${raspiBlitzVersion}" + fi + echo "hddRaspiVersion='${hddRaspiVersion}'" isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0) echo "isSSD=${isSSD}" From 37c1d6b6fb79b63ebe435f163c513bd5ba06fd4c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 11:52:20 -0500 Subject: [PATCH 191/293] reorder dialogs --- home.admin/00settingsMenuServices.sh | 1 + home.admin/95finalSetup.sh | 4 +- home.admin/XXdebugLogs.sh | 20 +-- home.admin/_bootstrap.sh | 33 +++-- ...trap.migration.sh => _bootstrap.update.sh} | 44 +----- home.admin/setup.scripts/eventInfoWait.sh | 14 +- .../setup.scripts/setupDialogControl.sh | 130 +++++++++--------- 7 files changed, 117 insertions(+), 129 deletions(-) rename home.admin/{_bootstrap.migration.sh => _bootstrap.update.sh} (89%) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 899ae2fa6..33229a891 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -6,6 +6,7 @@ source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf echo "services default values" +if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi if [ ${#BTCRPCexplorer} -eq 0 ]; then BTCRPCexplorer="off"; fi if [ ${#specter} -eq 0 ]; then specter="off"; fi diff --git a/home.admin/95finalSetup.sh b/home.admin/95finalSetup.sh index 61f655c2b..6c4c9c3ee 100755 --- a/home.admin/95finalSetup.sh +++ b/home.admin/95finalSetup.sh @@ -20,8 +20,8 @@ dialog --backtitle "RaspiBlitz - Setup" --title " RaspiBlitz Setup is done :) " Press OK for a final reboot. " 10 42 -# let migration/init script do the rest -/home/admin/_bootstrap.migration.sh +# let update script do the rest +/home/admin/_bootstrap.update.sh # copy logfile to analyse setup cp $logFile /home/admin/raspiblitz.setup.log diff --git a/home.admin/XXdebugLogs.sh b/home.admin/XXdebugLogs.sh index 6d15acb94..13b7ba561 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/XXdebugLogs.sh @@ -82,7 +82,7 @@ echo "--> CHECK CONFIG: sudo nginx -t" sudo nginx -t echo "" -if [ "${touchscreen}" = "0" ]; then +if [ "${touchscreen}" = "" ] || [ "${touchscreen}" = "0" ]; then echo "- TOUCHSCREEN is OFF by config" else echo "" @@ -92,7 +92,7 @@ else echo "" fi -if [ "${loop}" = "off" ]; then +if [ "${loop}" = "" ] || [ "${loop}" = "off" ]; then echo "- Loop is OFF by config" else echo "" @@ -102,7 +102,7 @@ else echo "" fi -if [ "${rtlWebinterface}" = "off" ]; then +if [ "${rtlWebinterface}" = "" ] || [ "${rtlWebinterface}" = "off" ]; then echo "- RTL is OFF by config" else echo "" @@ -112,7 +112,7 @@ else echo "" fi -if [ "${ElectRS}" = "off" ]; then +if [ "${ElectRS}" = "" ] || [ "${ElectRS}" = "off" ]; then echo "- Electrum Rust Server is OFF by config" else echo "" @@ -125,7 +125,7 @@ else echo "" fi -if [ "${lit}" = "off" ]; then +if [ "${lit}" = "" ] || [ "${lit}" = "off" ]; then echo "- LIT is OFF by config" else echo "" @@ -135,7 +135,7 @@ else echo "" fi -if [ "${BTCPayServer}" = "off" ]; then +if [ "${BTCPayServer}" = "" ] || [ "${BTCPayServer}" = "off" ]; then echo "- BTCPayServer is OFF by config" else echo "" @@ -145,7 +145,7 @@ else echo "" fi -if [ "${LNBits}" = "off" ]; then +if [ "${LNBits}" = "" ] || [ "${LNBits}" = "off" ]; then echo "- LNbits is OFF by config" else echo "" @@ -155,7 +155,7 @@ else echo "" fi -if [ "${thunderhub}" = "off" ]; then +if [ "${thunderhub}" = "" ] || [ "${thunderhub}" = "off" ]; then echo "- Thunderhub is OFF by config" else echo "" @@ -165,7 +165,7 @@ else echo "" fi -if [ "${specter}" = "off" ]; then +if [ "${specter}" = "" ] || [ "${specter}" = "off" ]; then echo "- SPECTER is OFF by config" else echo "" @@ -175,7 +175,7 @@ else echo "" fi -if [ "${sphinxrelay}" = "off" ]; then +if [ "${sphinxrelay}" = "" ] || [ "${sphinxrelay}" = "off" ]; then echo "- SPHINX is OFF by config" else echo "" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index e9adf26fb..1cf85082e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -25,6 +25,10 @@ logFile="/home/admin/raspiblitz.log" # used by display and later setup steps infoFile="/home/admin/raspiblitz.info" +# SETUPFILE +# this key/value file contains the state during the setup process +setupFile="/var/cache/raspiblitz/temp/raspiblitz.setup" + # Init boostrap log file echo "Writing logs to: ${logFile}" echo "" > $logFile @@ -359,17 +363,29 @@ echo "HDD already part of system: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then + # write data needed for setup process into raspiblitz.info + echo "hddBlocksBitcoin=${hddBlocksBitcoin}">> ${infoFile} + echo "hddBlocksLitecoin=${hddBlocksLitecoin}">> ${infoFile} + echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile - # determine correct info message + # determine correct setup phase infoMessage="Please Login for Setup" setupPhase="setup" - if [ "${hddRaspiData}" == "1" ]; then - infoMessage="Please Login for Update" - setupPhase="update" - elif [ "${hddGotMigrationData}" != "" ]; then + if [ "${hddGotMigrationData}" != "" ]; then infoMessage="Please Login for Migration" setupPhase="migration" + elif [ "${hddRaspiData}" == "1" ]; then + # determine if this is a recovery or an update + # TODO: improve version/update detetion later + isRecovery=$(echo "${hddRaspiVersion}" | grep -c "${codeVersion}") + if [ "${isRecovery}" == "1" ]; then + infoMessage="Please Login for Recovery" + setupPhase="recovery" + else + infoMessage="Please Login for Update" + setupPhase="update" + fi fi # signal "WAIT LOOP: SETUP" to LCD, SSH & WEBAPI @@ -415,9 +431,6 @@ if [ ${isMounted} -eq 0 ]; then done - echo "DEBUG ls /mnt/hdd/raspiblitz.conf" >> $logFile - ls /mnt/hdd/raspiblitz.conf >> $logFile - # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile if [ "${hddFormat}" != "btrfs" ]; then @@ -431,12 +444,12 @@ if [ ${isMounted} -eq 0 ]; then sudo /home/admin/config.scripts/blitz.datadrive.sh link # kick-off provision process - sed -i "s/^state=.*/state=recovering/g" ${infoFile} + sed -i "s/^state=.*/state=provision/g" ${infoFile} sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} #sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} #sed -i "s/^network=.*/network=${network}/g" ${infoFile} echo "Calling Data Migration .." >> $logFile - sudo /home/admin/_bootstrap.migration.sh + sudo /home/admin/_bootstrap.update.sh echo "Calling Provisioning .." >> $logFile sudo /home/admin/_bootstrap.provision.sh sed -i "s/^state=.*/state=reboot/g" ${infoFile} diff --git a/home.admin/_bootstrap.migration.sh b/home.admin/_bootstrap.update.sh similarity index 89% rename from home.admin/_bootstrap.migration.sh rename to home.admin/_bootstrap.update.sh index 97f4622d9..c854ed0e9 100755 --- a/home.admin/_bootstrap.migration.sh +++ b/home.admin/_bootstrap.update.sh @@ -10,8 +10,8 @@ infoFile="/home/admin/raspiblitz.info" configFile="/mnt/hdd/raspiblitz.conf" # debug info -echo "STARTED Migration/Init --> see logs in ${logFile}" -echo "STARTED Migration/Init" >> ${logFile} +echo "STARTED Update/Init --> see logs in ${logFile}" +echo "STARTED Update/Init" >> ${logFile} sudo sed -i "s/^message=.*/message='Running Data Migration'/g" ${infoFile} # HDD BTRFS RAID REPAIR IF NEEDED @@ -29,19 +29,13 @@ fi # LOAD DATA & PRECHECK -# check if there is a config file -configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') -if [ ${configExists} -eq 0 ]; then - echo "FAIL see ${logFile}" - echo "FAIL: no config file (${configFile}) found to init or upgrade!" >> ${logFile} - exit 1 -fi - # load old or init raspiblitz config source ${configFile} # check if config files contains basic: hostname if [ ${#hostname} -eq 0 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing hostname'/g" ${infoFile} echo "FAIL see ${logFile}" echo "FAIL: missing hostname in (${configFile})!" >> ${logFile} exit 1 @@ -52,6 +46,8 @@ source /home/admin/_version.info # check if code version was loaded if [ ${#codeVersion} -eq 0 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='missing /home/admin/_version.info'/g" ${infoFile} echo "FAIL see ${logFile}" echo "FAIL: no code version (/home/admin/_version.info) found!" >> ${logFile} exit 1 @@ -59,34 +55,6 @@ fi echo "prechecks OK" >> ${logFile} -# DEFAULT VALUES - MISSING data fields on init or upadte - -# AUTOPILOT -# autoPilot=off|on -if [ ${#autoPilot} -eq 0 ]; then - echo "autoPilot=off" >> $configFile -fi - -# AUTO NAT DISCOVERY -# autoNatDiscovery=off|on -if [ ${#autoNatDiscovery} -eq 0 ]; then - echo "autoNatDiscovery=off" >> $configFile -fi - -# TOR -# runBehindTor=off|on -if [ ${#runBehindTor} -eq 0 ]; then - echo "runBehindTor=off" >> $configFile -fi - -# RideTheLightning RTL -# rtlWebinterface=off|on -if [ ${#rtlWebinterface} -eq 0 ]; then - echo "rtlWebinterface=off" >> $configFile -fi - -echo "default values OK" >> ${logFile} - # MIGRATION - DATA CONVERSION when updating config # this is the place if on a future version change # a conversion of config data or app data is needed diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 308e71db0..89767cb78 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -51,13 +51,13 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 -elif [ "${eventID}" == "recovering" ] && [ "${mode}" == "lcd" ]; then +elif [ "${eventID}" == "provision" ] || [ "${eventID}" == "recovering" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Upgrade/Recover/Provision ---> ${contentString} Please keep running until reboot. -" 6 24 +" 7 40 elif [ "${eventID}" == "repair" ] && [ "${mode}" == "lcd" ]; then @@ -69,7 +69,15 @@ Use your Password A elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "lcd" ]; then - if [ "${setupPhase}" == "setup"] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "migration" ]; then + if [ "${setupPhase}" == "setup"] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then + + # custom backtitle for this dialog + backtitle="RaspiBlitz ${codeVersion} / ${setupPhase}" + + # display if HDD conatains blockhain or not + if [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then + backtitle="${backtitle} / (pre-synced)" + fi # show default login help info dialog --backtitle "${backtitle}" --cr-wrap --infobox " diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 2534c064a..0ec32481a 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -17,49 +17,70 @@ sudo chown admin:admin $SETUPFILE sudo chmod 777 $SETUPFILE ############################################ -# Basic Setup (Blockchain & Lightning Impl) -# (skip if migration was auto-detected) +# QuickOption: Update +if [ "${setupPhase}" == "update" ]; then -# migrationOS is from raspiblitz.info -if [ "${migrationOS}" == "" ]; then + echo "TODO: Update" + exit 1 + + # on cancel - default to normal setup + if [ "$?" != "0" ]; then + setupPhase="setup" + echo "# you refused update option - defaulting to normal setup" + exit 1 + fi +fi + +############################################ +# QuickOption: Recovery +if [ "${setupPhase}" == "recovery" ]; then + + echo "TODO: Update" + exit 1 + + # on cancel - default to normal setup + if [ "$?" != "0" ]; then + setupPhase="setup" + echo "# you refused recovery option - defaulting to normal setup" + exit 1 + fi +fi + +############################################ +# QuickOption: Migration from other node +if [ "${setupPhase}" == "migration" ]; then + + echo "# Starting migration dialog ..." + /home/admin/setup.scripts/dialogMigration.sh ${migrationOS} + + # on cancel - default to normal setup + if [ "$?" != "0" ]; then + setupPhase="setup" + echo "# you refused node migration option - defaulting to normal setup" + exit 1 + fi + +fi + +############################################ +# DEFAULT: Fresh Setup +# user might default to from quick options +if [ "${setupPhase}" == "setup" ]; then echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogBasicSetup.sh + result=$? + echo "result(${result})" + exit 1 + + # on cancel - let user exit to terminal if [ "$?" != "0" ]; then echo "# you selected cancel - sending exit code 1" exit 1 fi -fi - -# source setup state fresh - in case manual migration was choosen -source $SETUPFILE - -# migrationOS is from raspiblitz.info but might be overwritten from $SETUPFILE -if [ "${migrationOS}" != "" ]; then - - ############################################### - # MIGRATION - # other fullnodesOS or RaspiBlitz migration file - - echo "# Starting migration dialog ..." - /home/admin/setup.scripts/dialogMigration.sh - - # on cancel - shutdown system - if [ "$?" != "0" ]; then - clear - echo "OK .. no changes done to your hard drive. Shutting down." - sudo shutdown now - exit 1 - fi - -else - - ############################################### - # FRESH SETUP - ############################################ # Setting Name for Node @@ -91,27 +112,9 @@ else done -fi - -############################################ -# Enter Passwords -# for fresh setup & migration - -echo "# Starting passwords dialog ..." -/home/admin/setup.scripts/dialogPasswords.sh - -############################################ -# PROCESS SETUP CHOICES -# TODO: move this part later outside of dialog controller and combine with data from WebUI - -if [ "${migrationOS}" == "" ]; then - - ############################################ - # Normal Setup - echo "# CREATING raspiblitz.conf from your setup choices" - # prepate config file + # prepare config file CONFIGFILE="/mnt/hdd/raspiblitz.conf" sudo rm $CONFIGFILE 2>/dev/null sudo chown admin:admin $CONFIGFILE @@ -132,23 +135,18 @@ if [ "${migrationOS}" == "" ]; then echo "chain=main" >> $CONFIGFILE echo "runBehindTor=on" >> $CONFIGFILE - # set flag for bootstrap process to kick-off provision process - sudo sed -i "s/^state=.*/state=waitprovision/g" /home/admin/raspiblitz.info - -else - - ############################################ - # Process Migration - # TODO: move this part later outside of dialog controller and combine with data from WebUI - - # source the setup state fresh - source $SETUPFILE - - echo "TODO: Process Migration" - exit 1 - fi +############################################ +# Enter Passwords +# for fresh setup & migration + +echo "# Starting passwords dialog ..." +/home/admin/setup.scripts/dialogPasswords.sh + +# set flag for bootstrap process to kick-off provision process +sudo sed -i "s/^state=.*/state=waitprovision/g" /home/admin/raspiblitz.info + clear echo "# setup dialog done - results in:" echo "# $SETUPFILE" From cfa2e2c6d1d134f0bfbb77daca777d52b7b018a2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 17:57:40 -0500 Subject: [PATCH 192/293] recover dialog --- home.admin/setup.scripts/dialogRecovery.sh | 19 +++++++++++++++++++ .../setup.scripts/setupDialogControl.sh | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 home.admin/setup.scripts/dialogRecovery.sh diff --git a/home.admin/setup.scripts/dialogRecovery.sh b/home.admin/setup.scripts/dialogRecovery.sh new file mode 100644 index 000000000..ad236fddf --- /dev/null +++ b/home.admin/setup.scripts/dialogRecovery.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +whiptail --title " RASPIBLITZ RECOVERY " --yes-button "Start Recovery" --no-button "Other Options" --yesno "We found data from an existing RaspiBlitz on your HDD/SSD. + +You can start RECOVERY now to freshly build your system to this old configuration. This process is often used to repair broken features or clean the system up. + +You will need to set a new Password A for the SSH login. All your channels will stay open and other passwords will stay the same. + +Please make sure to have your seed words & static channel backup file (just in case). + +Do you want to start RECOVERY of your RaspiBlitz now? + " 18 65 + +result=$? +echo "result($result)" \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 0ec32481a..82e657013 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -35,7 +35,7 @@ fi # QuickOption: Recovery if [ "${setupPhase}" == "recovery" ]; then - echo "TODO: Update" + echo "TODO: RECOVERY" exit 1 # on cancel - default to normal setup From 485abcaccacc6a14e526874b80e86b1bef861c2b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:23:26 -0500 Subject: [PATCH 193/293] rearrange setup dialog --- home.admin/setup.scripts/dialogBasicSetup.sh | 61 ++---- .../dialogBlockchainLightning.sh | 80 ++++++++ home.admin/setup.scripts/dialogMigration.sh | 21 +- home.admin/setup.scripts/dialogRecovery.sh | 9 +- home.admin/setup.scripts/dialogUpdate.sh | 25 +++ .../setup.scripts/setupDialogControl.sh | 181 +++++++++++------- 6 files changed, 248 insertions(+), 129 deletions(-) create mode 100644 home.admin/setup.scripts/dialogBlockchainLightning.sh create mode 100644 home.admin/setup.scripts/dialogUpdate.sh diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index e808e8f8c..b405f07af 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -2,19 +2,13 @@ # get basic system information # these are the same set of infos the WebGUI dialog/controler has -source /home/admin/raspiblitz.info +source /home/admin/_version.info -# SETUPFILE -# this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" -source $SETUPFILE - -# choose blockchain or select migration +# chose how to setup node (fresh or from a upload backup) OPTIONS=() -OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") -OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") -OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") -OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") +OPTIONS+=(FRESHSETUP "Setup a new RaspiBlitz") +OPTIONS+=(FROMBACKUP "Upload Migration Backup") +OPTIONS+=(SHUTDOWN "Shutdown without Changes") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Welcome to your RaspiBlitz ⚡" \ @@ -23,36 +17,23 @@ CHOICE=$(dialog --clear \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear -network="" -lightning="" -migrationOS="" case $CHOICE in - BITCOIN1) - network="bitcoin" - lightning="lnd" + FRESHSETUP) + # 0 --> FRESH SETUP + exit 0; ;; - BITCOIN2) - network="bitcoin" - lightning="cln" + FROMBACKUP) + # 1 --> UPLOAD MIGRATION BACKUP + exit 1 ;; - LITECOIN) - network="litecoin" - lightning="lnd" + SHUTDOWN) + # 2 --> SHUTDOWN + exit 2 ;; - MIGRATION) - migrationOS="raspiblitz" - ;; -esac - -# on cancel - exit with 1 -if [ "${network}" == "" ] && [ "${migrationOS}" == "" ]; then - exit 1 -fi - -# write results to setup sate -echo "migrationOS='${migrationOS}'" >> $SETUPFILE -echo "migrationVersion=''" >> $SETUPFILE -echo "lightning=${lightning}" >> $SETUPFILE -echo "network=${network}" >> $SETUPFILE - -exit 0 \ No newline at end of file + *) + # 3 --> ESC/CANCEL = EXIT TO TERMINAL + clear + echo "Exit to Terminal from RaspiBlitz Setup ..." + echo "Command to return to Setup --> raspiblitz" + exit 3 +esac \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh new file mode 100644 index 000000000..006af3123 --- /dev/null +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" +source $SETUPFILE + +# values to determine by dialogs +network="" +lightning="" + +# chose blockchain +OPTIONS=() +OPTIONS+=(BITCOIN "Setup BITCOIN Blockchain (BitcoinCore)") +OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain")) +CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Blockchain ⚡" \ + --menu "\nChoose which Blockchain to run: \n " \ + 13 64 7 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) +clear +case $CHOICE in + BITCOIN) + # bitcoin core + network="bitcoin" + ;; + LITECOIN) + # litecoin + network="litecoin" + # can only work with LND + lightning="lnd" + ;; + *) + clear + echo "User Cancel" + exit 1 +esac + +if [ "${network}" == "bitcoin" ]; then + + # choose lightning client + OPTIONS=() + OPTIONS+=(LND "LND - Lightning Network Daemon (DEFAULT)") + OPTIONS+=(CLN "c-lightning by blockstream (fewer Apps)") + OPTIONS+=(NONE "Run without Lightning") + CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Lightning ⚡" \ + --menu "\nChoose your Lightning Client: \n " \ + 13 64 7 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) + clear +case $CHOICE in + LND) + lightning="lnd" + ;; + CLN) + lightning="cln" + ;; + NONE) + lightning="" + ;; + *) + clear + echo "User Cancel" + exit 1 +esac + +# write results to setup sate +echo "lightning=${lightning}" >> $SETUPFILE +echo "network=${network}" >> $SETUPFILE + +exit 0 \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 1bbe640d7..87935d704 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -99,8 +99,6 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # migration OS & Version were already set earlier in setup process - now add migration filename echo "migrationFile='${filename}'" >> $SETUPFILE - # user needs to reset password A - echo "setPasswordA=1" >> $SETUPFILE exit 0 fi @@ -126,15 +124,8 @@ Do you want to start migration to RaspiBlitz now? # user cancel - signal by exit code exit 1 fi - - # write migration info - echo "migrationOS='umbrel'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - - # user needs to reset password A, B & C - echo "setPasswordA=1" >> $SETUPFILE - echo "setPasswordB=1" >> $SETUPFILE - echo "setPasswordC=1" >> $SETUPFILE + + # signal that user wants to proceed with migration exit 0 fi @@ -160,14 +151,8 @@ Do you want to start migration to RaspiBlitz now? # user cancel - signal by exit code exit 1 fi - # write migration info - echo "migrationOS='mynode'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - # user needs to reset password A - echo "setPasswordA=1" >> $SETUPFILE - echo "setPasswordB=1" >> $SETUPFILE - echo "setPasswordC=1" >> $SETUPFILE + # signal that user wants to proceed with migration exit 0 fi diff --git a/home.admin/setup.scripts/dialogRecovery.sh b/home.admin/setup.scripts/dialogRecovery.sh index ad236fddf..dcebdc165 100644 --- a/home.admin/setup.scripts/dialogRecovery.sh +++ b/home.admin/setup.scripts/dialogRecovery.sh @@ -15,5 +15,10 @@ Please make sure to have your seed words & static channel backup file (just in c Do you want to start RECOVERY of your RaspiBlitz now? " 18 65 -result=$? -echo "result($result)" \ No newline at end of file +if [ "$?" == "0" ]; then + # 0 --> run recover + exit 0 +else + # 1 --> other options + exit 1 +fi \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogUpdate.sh b/home.admin/setup.scripts/dialogUpdate.sh new file mode 100644 index 000000000..a9db31acc --- /dev/null +++ b/home.admin/setup.scripts/dialogUpdate.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/_version.info +source /home/admin/raspiblitz.info + +whiptail --title " RASPIBLITZ UPDATE " --yes-button "Start Update" --no-button "Other Options" --yesno "We found data from an old RaspiBlitz on your HDD/SSD. + +You can start now the UPDATE to version ${codeVersion}. + +You will need to set a new Password A for the SSH login. All your channels will stay open and other passwords will stay the same. + +Please make sure to have your seed words & static channel backup file (just in case). + +Do you want to start UPDATE of your RaspiBlitz now? + " 18 65 + +if [ "$?" == "0" ]; then + # 0 --> run recover + exit 0 +else + # 1 --> other options + exit 1 +fi \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 82e657013..67451f24d 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -19,42 +19,51 @@ sudo chmod 777 $SETUPFILE ############################################ # QuickOption: Update if [ "${setupPhase}" == "update" ]; then - - echo "TODO: Update" - exit 1 - - # on cancel - default to normal setup - if [ "$?" != "0" ]; then + # show update dialog + /home/admin/setup.scripts/dialogUpdate.sh + if [ "$?" == "0" ]; then + # proceed with provision (mark Password A to be set) + echo "# OK update process starting .." + echo "setPasswordA=1" >> $SETUPFILE + else + # default to normal setup options setupPhase="setup" - echo "# you refused update option - defaulting to normal setup" - exit 1 + echo "# you refused recovery option - defaulting to normal setup" fi fi ############################################ # QuickOption: Recovery if [ "${setupPhase}" == "recovery" ]; then - - echo "TODO: RECOVERY" - exit 1 - - # on cancel - default to normal setup - if [ "$?" != "0" ]; then + # show recovery dialog + /home/admin/setup.scripts/dialogRecovery.sh + if [ "$?" == "0" ]; then + # proceed with provision (mark Password A to be set) + echo "# OK recover process starting .." + echo "setPasswordA=1" >> $SETUPFILE + else + # default to normal setup options setupPhase="setup" echo "# you refused recovery option - defaulting to normal setup" - exit 1 fi fi ############################################ # QuickOption: Migration from other node if [ "${setupPhase}" == "migration" ]; then - + # show recovery dialog echo "# Starting migration dialog ..." /home/admin/setup.scripts/dialogMigration.sh ${migrationOS} - - # on cancel - default to normal setup - if [ "$?" != "0" ]; then + if [ "$?" == "0" ]; then + # mark migration to happen on provision + echo "migrationOS='umbrel'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + # user needs to reset password A, B & C + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + else + # on cancel - default to normal setup setupPhase="setup" echo "# you refused node migration option - defaulting to normal setup" exit 1 @@ -63,77 +72,111 @@ if [ "${setupPhase}" == "migration" ]; then fi ############################################ -# DEFAULT: Fresh Setup +# DEFAULT: Basic Setup menu # user might default to from quick options if [ "${setupPhase}" == "setup" ]; then echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogBasicSetup.sh + menuresult=$? - result=$? - echo "result(${result})" - exit 1 + # exit to terminal + if [ "${menuresult}" == "3" ]; then + exit 0 + fi + # shutdown without changes + if [ "${menuresult}" == "2" ]; then + sudo shutdown now + exit 0 + fi - # on cancel - let user exit to terminal - if [ "$?" != "0" ]; then - echo "# you selected cancel - sending exit code 1" - exit 1 + # uplaod and setup from migration backup + if [ "${menuresult}" == "1" ]; then + /home/admin/setup.scripts/dialogMigration.sh raspiblitz + if [ "$?" == "1" ]; then + echo "Upload did not worked ... doing shutdown. Restart for new try." + sudo shutdown now + exit 0 + fi + # user needs to reset password A + echo "setPasswordA=1" >> $SETUPFILE fi ############################################ - # Setting Name for Node + # FRESH SETUP + if [ "${menuresult}" == "0" ]; then - echo "# Starting basic setup dialog ..." - /home/admin/setup.scripts/dialogName.sh + ############################################ + # Choosing Blockchain & Lightning - ############################################ - # Lightning Wallet (new or restore) do this before passwords - # because password C not needed if LND rescue file is uploaded - - lightningWalletDone=0 - while [ "${lightningWalletDone}" == "0" ] - do - - echo "# Starting lightning wallet dialog ..." - /home/admin/setup.scripts/dialogLightningWallet.sh - - # only if dialog exited clean end loop - if [ "$?" == "0" ]; then - lightningWalletDone=1 - fi - - # allow user to cancel to terminal on dialog main menu - # all other cancels have other exit codes + echo "# Starting Blockchain & Lightning selection ..." + /home/admin/setup.scripts/dialogBlockchainLightning.sh if [ "$?" == "1" ]; then - echo "# you selected cancel - sending exit code 1" - exit 1 + echo "Shutting down ... Restart for new try." + sudo shutdown now + exit 0 fi - done + ############################################ + # Setting Name for Node - echo "# CREATING raspiblitz.conf from your setup choices" + echo "# Starting name dialog ..." + /home/admin/setup.scripts/dialogName.sh - # prepare config file - CONFIGFILE="/mnt/hdd/raspiblitz.conf" - sudo rm $CONFIGFILE 2>/dev/null - sudo chown admin:admin $CONFIGFILE - sudo chmod 777 $CONFIGFILE + ############################################ + # Lightning Wallet (new or restore) do this before passwords + # because password C not needed if LND rescue file is uploaded - # source the raspiblitz version - source /home/admin/_version.info + lightningWalletDone=0 + while [ "${lightningWalletDone}" == "0" ] + do - # source the setup state fresh - source $SETUPFILE + echo "# Starting lightning wallet dialog ..." + /home/admin/setup.scripts/dialogLightningWallet.sh - # write basic config file data - echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE - echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE - echo "lcdrotate=1" >> $CONFIGFILE - echo "lightning=${lightning}" >> $CONFIGFILE - echo "network=${network}" >> $CONFIGFILE - echo "chain=main" >> $CONFIGFILE - echo "runBehindTor=on" >> $CONFIGFILE + # only if dialog exited clean end loop + if [ "$?" == "0" ]; then + lightningWalletDone=1 + fi + + # allow user to cancel to terminal on dialog main menu + # all other cancels have other exit codes + if [ "$?" == "1" ]; then + echo "# you selected cancel - sending exit code 1" + exit 1 + fi + + done + + echo "# CREATING raspiblitz.conf from your setup choices" + + # source the raspiblitz version + source /home/admin/_version.info + + # source the setup state fresh + source $SETUPFILE + + # prepare config file + CONFIGFILE="/mnt/hdd/raspiblitz.conf" + sudo rm $CONFIGFILE 2>/dev/null + sudo chown admin:admin $CONFIGFILE + sudo chmod 777 $CONFIGFILE + + # write basic config file data + echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE + echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE + echo "lcdrotate=1" >> $CONFIGFILE + echo "lightning=${lightning}" >> $CONFIGFILE + echo "network=${network}" >> $CONFIGFILE + echo "chain=main" >> $CONFIGFILE + echo "runBehindTor=on" >> $CONFIGFILE + + # user needs to set all passwords + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + fi fi From b8e322578c0323724c419e4a0a9ecdf4ff96df16 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:46:18 -0500 Subject: [PATCH 194/293] loop on cancel --- home.admin/setup.scripts/dialogBasicSetup.sh | 5 ++++- home.admin/setup.scripts/setupDialogControl.sh | 8 +++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index b405f07af..fed60c80a 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -13,7 +13,7 @@ CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Welcome to your RaspiBlitz ⚡" \ --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ - 13 64 7 \ + 12 64 6 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear @@ -28,6 +28,9 @@ case $CHOICE in ;; SHUTDOWN) # 2 --> SHUTDOWN + clear + echo "Shutting down without changes ..." + echo "Cut power when you see no status LED action anymore." exit 2 ;; *) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 67451f24d..9aa6bdb31 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -82,7 +82,7 @@ if [ "${setupPhase}" == "setup" ]; then # exit to terminal if [ "${menuresult}" == "3" ]; then - exit 0 + exit 1 fi # shutdown without changes @@ -95,8 +95,7 @@ if [ "${setupPhase}" == "setup" ]; then if [ "${menuresult}" == "1" ]; then /home/admin/setup.scripts/dialogMigration.sh raspiblitz if [ "$?" == "1" ]; then - echo "Upload did not worked ... doing shutdown. Restart for new try." - sudo shutdown now + # upload did not worked .. exit with 0 to restart process from outside loop exit 0 fi # user needs to reset password A @@ -113,8 +112,7 @@ if [ "${setupPhase}" == "setup" ]; then echo "# Starting Blockchain & Lightning selection ..." /home/admin/setup.scripts/dialogBlockchainLightning.sh if [ "$?" == "1" ]; then - echo "Shutting down ... Restart for new try." - sudo shutdown now + # exit with 0 to restart process from outside loop exit 0 fi From 56b3a72e740931923fa2110e45fc7aafbc303a7f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:47:44 -0500 Subject: [PATCH 195/293] remove duplicate info --- home.admin/setup.scripts/dialogBasicSetup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index fed60c80a..6a6b2fd7f 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -37,6 +37,5 @@ case $CHOICE in # 3 --> ESC/CANCEL = EXIT TO TERMINAL clear echo "Exit to Terminal from RaspiBlitz Setup ..." - echo "Command to return to Setup --> raspiblitz" exit 3 esac \ No newline at end of file From 59f6367d4bfd04450daf6c39496bbf029b4e27d7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:50:00 -0500 Subject: [PATCH 196/293] fix syntax --- home.admin/setup.scripts/dialogBlockchainLightning.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 006af3123..9f7262a6a 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -16,7 +16,7 @@ lightning="" # chose blockchain OPTIONS=() OPTIONS+=(BITCOIN "Setup BITCOIN Blockchain (BitcoinCore)") -OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain")) +OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Blockchain ⚡" \ From 1630fd2510aae873be5ba2f042c922eff6bc1b73 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:52:35 -0500 Subject: [PATCH 197/293] fix gui --- home.admin/setup.scripts/dialogBlockchainLightning.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 9f7262a6a..6196cbe07 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -21,7 +21,7 @@ CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Blockchain ⚡" \ --menu "\nChoose which Blockchain to run: \n " \ - 13 64 7 \ + 11 64 5 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear From 6c681fd68d5adeb0bf23070bc8fd9ebf09a4e232 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:53:32 -0500 Subject: [PATCH 198/293] fix syntax --- home.admin/setup.scripts/dialogBlockchainLightning.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 6196cbe07..406ea66c6 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -57,7 +57,7 @@ if [ "${network}" == "bitcoin" ]; then "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear -case $CHOICE in + case $CHOICE in LND) lightning="lnd" ;; @@ -71,7 +71,8 @@ case $CHOICE in clear echo "User Cancel" exit 1 -esac + esac +fi # write results to setup sate echo "lightning=${lightning}" >> $SETUPFILE From bfb04ca91958434efd7e167ef0edf922ab6bc06b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 20:54:05 -0500 Subject: [PATCH 199/293] fix gui --- home.admin/setup.scripts/dialogBlockchainLightning.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 406ea66c6..48a141dc9 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -53,7 +53,7 @@ if [ "${network}" == "bitcoin" ]; then --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Lightning ⚡" \ --menu "\nChoose your Lightning Client: \n " \ - 13 64 7 \ + 12 64 6 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear From a52a8bd0666bcfb602df5149ef53c09701ccf94a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 21:18:37 -0500 Subject: [PATCH 200/293] protect old data from deletion --- .../setup.scripts/dialogBlockchainLightning.sh | 2 +- home.admin/setup.scripts/dialogDeleteData.sh | 14 ++++++++++++++ home.admin/setup.scripts/setupDialogControl.sh | 12 ++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 home.admin/setup.scripts/dialogDeleteData.sh diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 48a141dc9..f91b64f03 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -16,7 +16,7 @@ lightning="" # chose blockchain OPTIONS=() OPTIONS+=(BITCOIN "Setup BITCOIN Blockchain (BitcoinCore)") -OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain") +OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain (experimental)") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Blockchain ⚡" \ diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh new file mode 100644 index 000000000..4dbe4081c --- /dev/null +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "CANCEL" --yesno "For fresh setup your data drive needs to be formatted, but there is old data on your HDD/SSD that could contain funds. + +Are you really sure that you want delete that old data? + " 10 65 + +if [ "$?" == "0" ]; then + # 0 --> delete data + exit 0 +else + # 1 --> cancel + exit 1 +fi \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 9aa6bdb31..1faf9a2e4 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -8,6 +8,9 @@ source /home/admin/raspiblitz.info # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" +# remember original setupphase +orgSetupPhase="${setupPhase}" + # init SETUPFILE & temp dir on mem drive sudo mkdir /var/cache/raspiblitz/temp sudo chown admin:admin /var/cache/raspiblitz/temp @@ -106,6 +109,15 @@ if [ "${setupPhase}" == "setup" ]; then # FRESH SETUP if [ "${menuresult}" == "0" ]; then + # if other data is on HDD/SSD from migration/recover warn on formatting drive + if [ "${orgSetupPhase}" != "${setupPhase}" ]; then + /home/admin/setup.scripts/dialogDeleteData.sh + if [ "$?" == "1" ]; then + # exit with 0 to restart process from outside loop + exit 0 + fi + fi + ############################################ # Choosing Blockchain & Lightning From 8d1ad8fb994853badc040256cf15e62e9a639dd6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 21:22:16 -0500 Subject: [PATCH 201/293] fix wait info --- home.admin/setup.scripts/eventInfoWait.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 89767cb78..d250597c8 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -117,9 +117,8 @@ your connection to internet router. elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "ssh" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Preparing Setup Please wait ... -" 6 24 +" 5 24 elif [ "${eventID}" == "waitprovision" ]; then From ac5692234802ab43b984ad4828e8fe6273c808f0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 21 May 2021 21:24:04 -0500 Subject: [PATCH 202/293] fix ssh --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d250597c8..2d7c629e5 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -118,7 +118,7 @@ elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "ssh" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Please wait ... -" 5 24 +" 5 22 elif [ "${eventID}" == "waitprovision" ]; then From dd4f9f95040e72a39e551061371b4d4832d58982 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 10:40:19 -0500 Subject: [PATCH 203/293] update delete --- home.admin/setup.scripts/dialogDeleteData.sh | 45 ++++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh index 4dbe4081c..1996f093e 100644 --- a/home.admin/setup.scripts/dialogDeleteData.sh +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -1,14 +1,43 @@ #!/bin/bash -whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "CANCEL" --yesno "For fresh setup your data drive needs to be formatted, but there is old data on your HDD/SSD that could contain funds. +if [ "$1" == "format" ]; then + + whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "CANCEL" --yesno "For fresh setup your data drive needs to be formatted, but there is old data on your HDD/SSD that could contain funds. Are you really sure that you want delete that old data? " 10 65 -if [ "$?" == "0" ]; then - # 0 --> delete data - exit 0 -else - # 1 --> cancel - exit 1 -fi \ No newline at end of file + if [ "$?" == "0" ]; then + # 0 --> delete data + exit 0 + else + # 1 --> cancel + exit 1 + fi + +if [ "$1" == "keepblockchain" ]; then + + blockchainName=$2 + if [ "${blockchainName}" == "" ]; then + blockchainName="BITCOIN" + fi + + whiptail --title " BLOCKCHAIN DATA FOUND " --yes-button "KEEP BLOCKCHAIN" --no-button "NO" --yesno "We found on the data drive ${blockchainName} blockchain data. + +This can reduce your setup/sync time but if you didnt validated that blockchain yourself there is a level of trust involved. + +Do you want to use that blockchain & its data and DELETE ALL OTHER DATA? + " 10 65 + + if [ "$?" == "0" ]; then + # 0 --> use blockchain & delete all other data + exit 0 + else + # 1 --> cancel + exit 1 + fi + +fi + +echo "err='unkown parameter'" +exit 1 \ No newline at end of file From b482b41a3faee881ce01167ef84691eaa9e877d6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 10:48:45 -0500 Subject: [PATCH 204/293] fix syntax and wording --- home.admin/setup.scripts/dialogDeleteData.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh index 1996f093e..528c49987 100644 --- a/home.admin/setup.scripts/dialogDeleteData.sh +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -2,10 +2,10 @@ if [ "$1" == "format" ]; then - whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "CANCEL" --yesno "For fresh setup your data drive needs to be formatted, but there is old data on your HDD/SSD that could contain funds. + whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "Your data drive will now be formatted. This will delete all data on your connected HDD/SSD. Make sure that there is no important data or old funds on that data drive. -Are you really sure that you want delete that old data? - " 10 65 +Are you sure to format the HDD/SSD and DELETE ALL DATA on it? + " 14 65 if [ "$?" == "0" ]; then # 0 --> delete data @@ -14,6 +14,7 @@ Are you really sure that you want delete that old data? # 1 --> cancel exit 1 fi +fi if [ "$1" == "keepblockchain" ]; then From e5e05de464b16c0f4d0d8a7c705d475bf73389e8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 11:47:35 -0500 Subject: [PATCH 205/293] format HDD & keep blockchain --- .../dialogBlockchainLightning.sh | 30 +++++++++----- home.admin/setup.scripts/dialogDeleteData.sh | 2 +- .../setup.scripts/setupDialogControl.sh | 40 ++++++++++++++++++- 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index f91b64f03..7656fe9fd 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -9,23 +9,25 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE -# values to determine by dialogs -network="" -lightning="" -# chose blockchain -OPTIONS=() -OPTIONS+=(BITCOIN "Setup BITCOIN Blockchain (BitcoinCore)") -OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain (experimental)") -CHOICE=$(dialog --clear \ +################################# +# SELECT BLOCKCHAIN +# when not already set by setupfile + +if [ "${network}" == "" ]; then + + OPTIONS=() + OPTIONS+=(BITCOIN "Setup BITCOIN Blockchain (BitcoinCore)") + OPTIONS+=(LITECOIN "Setup LITECOIN Blockchain (experimental)") + CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Blockchain ⚡" \ --menu "\nChoose which Blockchain to run: \n " \ 11 64 5 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) -clear -case $CHOICE in + clear + case $CHOICE in BITCOIN) # bitcoin core network="bitcoin" @@ -40,7 +42,13 @@ case $CHOICE in clear echo "User Cancel" exit 1 -esac + esac +fi + + +################################# +# SELECT LIGHTNING +# only possible when network is bitcoin if [ "${network}" == "bitcoin" ]; then diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh index 528c49987..cc0acd91d 100644 --- a/home.admin/setup.scripts/dialogDeleteData.sh +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -5,7 +5,7 @@ if [ "$1" == "format" ]; then whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "Your data drive will now be formatted. This will delete all data on your connected HDD/SSD. Make sure that there is no important data or old funds on that data drive. Are you sure to format the HDD/SSD and DELETE ALL DATA on it? - " 14 65 + " 12 65 if [ "$?" == "0" ]; then # 0 --> delete data diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 1faf9a2e4..587a538d3 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -109,13 +109,51 @@ if [ "${setupPhase}" == "setup" ]; then # FRESH SETUP if [ "${menuresult}" == "0" ]; then + ############################################ + # Format HDD/SSD - Keep Blockchain + formatNeeded=1 + + # check if there is a blockchain to use (so HDD is already formatted) + # thats also true if the node is coming from another nodeOS + if [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ] || [ "${hddGotMigrationData}" != "" ]; then + /home/admin/setup.scripts/dialogDeleteData.sh keepblockchain + if [ "$?" == "1" ]; then + + # dont format HDD later - reuse data and clean up + formatNeeded=0 + + # when blockchain comes from another node migrate data first + if [ "${hddGotMigrationData}" != "" ]; then + echo "TODO: Migrate data from '{hddGotMigrationData}'" + fi + + # delete everything but blockchain + echo "TODO: Delete everything but blockchain" + + # by keeping that blockchain - user choosed already the blockchain type + if [ "${hddBlocksLitecoin}" == "1" ]; then + echo "network=litecoin" >> $SETUPFILE + else + echo "network=bitcoin" >> $SETUPFILE + fi + + # exit with 0 to restart process from outside loop + exit 1 + fi + fi + # if other data is on HDD/SSD from migration/recover warn on formatting drive - if [ "${orgSetupPhase}" != "${setupPhase}" ]; then + if [ "${formatNeeded}" == "1" ]; then /home/admin/setup.scripts/dialogDeleteData.sh if [ "$?" == "1" ]; then # exit with 0 to restart process from outside loop exit 0 fi + + # delete everything but blockchain + echo "TODO: Format HDD/SSD" + exit 1 + fi ############################################ From be9310d9ff7808f71e2161b18e5eefc8d66f3a09 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 11:48:46 -0500 Subject: [PATCH 206/293] add info on node migration --- home.admin/_bootstrap.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1cf85082e..5b4735db7 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -364,8 +364,10 @@ echo "HDD already part of system: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then # write data needed for setup process into raspiblitz.info - echo "hddBlocksBitcoin=${hddBlocksBitcoin}">> ${infoFile} - echo "hddBlocksLitecoin=${hddBlocksLitecoin}">> ${infoFile} + echo "hddBlocksBitcoin=${hddBlocksBitcoin}" >> ${infoFile} + echo "hddBlocksLitecoin=${hddBlocksLitecoin}" >> ${infoFile} + echo "hddGotMigrationData=${hddGotMigrationData}" >> ${infoFile} + echo "" echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile From 87ff5494f053e8e5f10f19f568f91c72337b8628 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 12:31:43 -0500 Subject: [PATCH 207/293] formatting dialog --- home.admin/setup.scripts/dialogDeleteData.sh | 77 +++++++------ .../setup.scripts/setupDialogControl.sh | 108 ++++++++++-------- 2 files changed, 105 insertions(+), 80 deletions(-) diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh index cc0acd91d..50f081594 100644 --- a/home.admin/setup.scripts/dialogDeleteData.sh +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -1,44 +1,57 @@ #!/bin/bash -if [ "$1" == "format" ]; then +# FIRST PARAMETER can be the name of the blockchain data that is available in the HDD/SS +# if set the user will be given to option to DELETE ALL DATA but KEEP BLOCKCHAIN +blockchainName=$1 +keepBlockchain=0 +if [ ${blockchainName} != "" ]; then + + whiptail --title " BLOCKCHAIN DATA FOUND " --yes-button "USE BLOCKCHAIN" --no-button "DELETE" --yesno "We found ${blockchainName} blockchain data on your HDD/SSD. + +Using existing blockchain data can reduce your setup/sync time. But if you didnt validated that blockchain yourself there is a level of trust involved. + +Do you want to use that blockchain data and run ${blockchainName}? + " 10 65 + + if [ "$?" == "0" ]; then + # 0 --> use blockchain & delete all other data + keepBlockchain=1 + fi +fi + +# normally when the the HDD will get formatted and the user will get asked about that +# if before the user decided to keep the blockchain instead if formatting just "ALL OTHER DATA" wil get deleted + +if [ "${keepBlockchain}" == "1" ]; then + + # deleting all data around blockchain security question + whiptail --title " DELETING ALL OTHER DATA " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "OK we will keep the blockchain data - but all other data on your HDD/SSD will get deleted on setup. Make sure that there is no important data or old funds on that data drive. + +Are you sure to DELETE ALL OTHER DATA on the HDD/SSD? + " 12 65 + + if [ "$?" == "0" ]; then + # 0 --> keep blockchain + delete all other data + exit 2 + else + # 1 --> cancel / stop + exit 0 + fi + +else + + # normal formatting data drive security question whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "Your data drive will now be formatted. This will delete all data on your connected HDD/SSD. Make sure that there is no important data or old funds on that data drive. Are you sure to format the HDD/SSD and DELETE ALL DATA on it? " 12 65 if [ "$?" == "0" ]; then - # 0 --> delete data - exit 0 - else - # 1 --> cancel + # 0 --> format drive exit 1 - fi -fi - -if [ "$1" == "keepblockchain" ]; then - - blockchainName=$2 - if [ "${blockchainName}" == "" ]; then - blockchainName="BITCOIN" - fi - - whiptail --title " BLOCKCHAIN DATA FOUND " --yes-button "KEEP BLOCKCHAIN" --no-button "NO" --yesno "We found on the data drive ${blockchainName} blockchain data. - -This can reduce your setup/sync time but if you didnt validated that blockchain yourself there is a level of trust involved. - -Do you want to use that blockchain & its data and DELETE ALL OTHER DATA? - " 10 65 - - if [ "$?" == "0" ]; then - # 0 --> use blockchain & delete all other data - exit 0 else - # 1 --> cancel - exit 1 + # 1 --> cancel / stop + exit 0 fi - -fi - -echo "err='unkown parameter'" -exit 1 \ No newline at end of file +fi \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 587a538d3..948563be3 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -94,11 +94,70 @@ if [ "${setupPhase}" == "setup" ]; then exit 0 fi - # uplaod and setup from migration backup + ############################################### + # FORMAT DRIVE on NEW SETUP or MIGRATION UPLOAD + if [ "${menuresult}" == "0" ] || [ "${menuresult}" == "1" ]; then + + # check if there is a blockchain to use (so HDD is already formatted) + # thats also true if the node is coming from another nodeOS + existingBlockchain="" + if [ "${hddBlocksLitecoin}" == "1" ]; then + existingBlockchain="LITECOIN" + fi + if [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddGotMigrationData}" != "" ]; then + existingBlockchain="BITCOIN" + fi + + # ask user about possible existing blockchain and formatting HDD + /home/admin/setup.scripts/dialogDeleteData.sh "${existingBlockchain}" + userChoice=$? + if [ "${userChoice}" == "1" ]; then + + # FORMAT DATA DRIVE + echo "TODO: Format HDD/SSD" + + # DEBUG EXIT + exit 1 + + if [ "${userChoice}" == "2" ]; then + + # KEEP BLOCKCHAIN + DLETE ALL THE REST + + # when blockchain comes from another node migrate data first + if [ "${hddGotMigrationData}" != "" ]; then + echo "TODO: Migrate data from '{hddGotMigrationData}'" + fi + + # delete everything but blockchain + echo "TODO: Delete everything but blockchain" + + # by keeping that blockchain - user choosed already the blockchain type + if [ "${hddBlocksLitecoin}" == "1" ]; then + echo "network=litecoin" >> $SETUPFILE + else + echo "network=bitcoin" >> $SETUPFILE + fi + + # DEBUG EXIT + exit 1 + + else + + # STOP SETUP - loop back to setup menu start + exit 0 + + fi + + fi + + ############################################ + # UPLOAD MIGRATION if [ "${menuresult}" == "1" ]; then /home/admin/setup.scripts/dialogMigration.sh raspiblitz if [ "$?" == "1" ]; then # upload did not worked .. exit with 0 to restart process from outside loop + echo "Upload failed ... return to menu" + sleep 2 exit 0 fi # user needs to reset password A @@ -109,53 +168,6 @@ if [ "${setupPhase}" == "setup" ]; then # FRESH SETUP if [ "${menuresult}" == "0" ]; then - ############################################ - # Format HDD/SSD - Keep Blockchain - formatNeeded=1 - - # check if there is a blockchain to use (so HDD is already formatted) - # thats also true if the node is coming from another nodeOS - if [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ] || [ "${hddGotMigrationData}" != "" ]; then - /home/admin/setup.scripts/dialogDeleteData.sh keepblockchain - if [ "$?" == "1" ]; then - - # dont format HDD later - reuse data and clean up - formatNeeded=0 - - # when blockchain comes from another node migrate data first - if [ "${hddGotMigrationData}" != "" ]; then - echo "TODO: Migrate data from '{hddGotMigrationData}'" - fi - - # delete everything but blockchain - echo "TODO: Delete everything but blockchain" - - # by keeping that blockchain - user choosed already the blockchain type - if [ "${hddBlocksLitecoin}" == "1" ]; then - echo "network=litecoin" >> $SETUPFILE - else - echo "network=bitcoin" >> $SETUPFILE - fi - - # exit with 0 to restart process from outside loop - exit 1 - fi - fi - - # if other data is on HDD/SSD from migration/recover warn on formatting drive - if [ "${formatNeeded}" == "1" ]; then - /home/admin/setup.scripts/dialogDeleteData.sh - if [ "$?" == "1" ]; then - # exit with 0 to restart process from outside loop - exit 0 - fi - - # delete everything but blockchain - echo "TODO: Format HDD/SSD" - exit 1 - - fi - ############################################ # Choosing Blockchain & Lightning From 8de715331b643cb6ed2319955093c8c69e768f98 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 12:50:24 -0500 Subject: [PATCH 208/293] fix syntax --- home.admin/setup.scripts/setupDialogControl.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 948563be3..f37714671 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -118,8 +118,8 @@ if [ "${setupPhase}" == "setup" ]; then # DEBUG EXIT exit 1 - - if [ "${userChoice}" == "2" ]; then + + elif [ "${userChoice}" == "2" ]; then # KEEP BLOCKCHAIN + DLETE ALL THE REST From 3163b44da91428f351f01f1f5aced4a80fcfc985 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 12:56:13 -0500 Subject: [PATCH 209/293] fix dialogs --- home.admin/setup.scripts/dialogDeleteData.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogDeleteData.sh b/home.admin/setup.scripts/dialogDeleteData.sh index 50f081594..80904a2c1 100644 --- a/home.admin/setup.scripts/dialogDeleteData.sh +++ b/home.admin/setup.scripts/dialogDeleteData.sh @@ -9,10 +9,10 @@ if [ ${blockchainName} != "" ]; then whiptail --title " BLOCKCHAIN DATA FOUND " --yes-button "USE BLOCKCHAIN" --no-button "DELETE" --yesno "We found ${blockchainName} blockchain data on your HDD/SSD. -Using existing blockchain data can reduce your setup/sync time. But if you didnt validated that blockchain yourself there is a level of trust involved. +Using existing blockchain data can reduce the setup/sync time. But if you didnt validated the blockchain yourself there is a level of trust involved. Do you want to use that blockchain data and run ${blockchainName}? - " 10 65 + " 14 68 if [ "$?" == "0" ]; then # 0 --> use blockchain & delete all other data @@ -29,7 +29,7 @@ if [ "${keepBlockchain}" == "1" ]; then whiptail --title " DELETING ALL OTHER DATA " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "OK we will keep the blockchain data - but all other data on your HDD/SSD will get deleted on setup. Make sure that there is no important data or old funds on that data drive. Are you sure to DELETE ALL OTHER DATA on the HDD/SSD? - " 12 65 + " 11 65 if [ "$?" == "0" ]; then # 0 --> keep blockchain + delete all other data @@ -42,10 +42,10 @@ Are you sure to DELETE ALL OTHER DATA on the HDD/SSD? else # normal formatting data drive security question - whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "Your data drive will now be formatted. This will delete all data on your connected HDD/SSD. Make sure that there is no important data or old funds on that data drive. + whiptail --title " FORMATTING DATA DRVE " --yes-button "DELETE DATA" --no-button "STOP SETUP" --yesno "Your data drive will now get formatted. This will delete all data on your connected HDD/SSD. Make sure that there is no important data or old funds on that data drive. Are you sure to format the HDD/SSD and DELETE ALL DATA on it? - " 12 65 + " 11 65 if [ "$?" == "0" ]; then # 0 --> format drive From 8d2532bf084b73988ecdbc58866b9bb1a53148fd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 13:00:07 -0500 Subject: [PATCH 210/293] fix recovery dialog --- home.admin/setup.scripts/dialogRecovery.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogRecovery.sh b/home.admin/setup.scripts/dialogRecovery.sh index dcebdc165..69ed936f9 100644 --- a/home.admin/setup.scripts/dialogRecovery.sh +++ b/home.admin/setup.scripts/dialogRecovery.sh @@ -6,14 +6,14 @@ source /home/admin/raspiblitz.info whiptail --title " RASPIBLITZ RECOVERY " --yes-button "Start Recovery" --no-button "Other Options" --yesno "We found data from an existing RaspiBlitz on your HDD/SSD. -You can start RECOVERY now to freshly build your system to this old configuration. This process is often used to repair broken features or clean the system up. +You can now start RECOVERY to freshly build your system based on existing configuration & data. This process is often used to repair broken features or clean the system up. -You will need to set a new Password A for the SSH login. All your channels will stay open and other passwords will stay the same. +You will need to set a new Password A for the SSH login. All other passwords will stay the same and yout channels will stay open. Please make sure to have your seed words & static channel backup file (just in case). Do you want to start RECOVERY of your RaspiBlitz now? - " 18 65 + " 20 68 if [ "$?" == "0" ]; then # 0 --> run recover From e68daf21dea6d426a6f21f276114a1ba68d0cc19 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 13:01:17 -0500 Subject: [PATCH 211/293] fix typo --- home.admin/setup.scripts/dialogRecovery.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogRecovery.sh b/home.admin/setup.scripts/dialogRecovery.sh index 69ed936f9..f8affdedd 100644 --- a/home.admin/setup.scripts/dialogRecovery.sh +++ b/home.admin/setup.scripts/dialogRecovery.sh @@ -8,7 +8,7 @@ whiptail --title " RASPIBLITZ RECOVERY " --yes-button "Start Recovery" --no-butt You can now start RECOVERY to freshly build your system based on existing configuration & data. This process is often used to repair broken features or clean the system up. -You will need to set a new Password A for the SSH login. All other passwords will stay the same and yout channels will stay open. +You will need to set a new Password A for the SSH login. All other passwords will stay the same and channels will stay open. Please make sure to have your seed words & static channel backup file (just in case). From ee254b30933d5bb2bda1fd8b698ca774bd21cfb1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 22 May 2021 16:22:48 -0500 Subject: [PATCH 212/293] formatting HDD --- .../setup.scripts/setupDialogControl.sh | 42 +++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index f37714671..26c2aa86f 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -114,9 +114,27 @@ if [ "${setupPhase}" == "setup" ]; then if [ "${userChoice}" == "1" ]; then # FORMAT DATA DRIVE - echo "TODO: Format HDD/SSD" + filesystem="ext4" + + # check if there is a flag set on sd card boot section to format as btrfs (experimental) + flagBTRFS=$(sudo ls /boot/btrfs* 2>/dev/null | grep -c btrfs) + if [ "${flagBTRFS}" != "0" ]; then + echo "Found BTRFS flag ---> formatting with experimental BTRFS filesystem" + filesystem="btrfs" + sleep 5 + fi + + # run formatting + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ${filesystem} ${hddCandidate}) + if [ "${error}" != "" ]; then + echo "FAIL ON FORMATTING THE DRIVE:" + echo "${error}" + echo "Please report as issue on the raspiblitz github." + exit 1 + fi # DEBUG EXIT + echo "OK Format done" exit 1 elif [ "${userChoice}" == "2" ]; then @@ -125,13 +143,31 @@ if [ "${setupPhase}" == "setup" ]; then # when blockchain comes from another node migrate data first if [ "${hddGotMigrationData}" != "" ]; then - echo "TODO: Migrate data from '{hddGotMigrationData}'" + clear + echo "Migrating Blockchain of ${hddGotMigrationData}'" + source <(sudo /home/admin/config.scripts/blitz.migration.sh migration-${hddGotMigrationData}) + if [ "${err}" != "" ]; then + echo "MIGRATION OF BLOCKHAIN FAILED: ${err}" + echo "Format data disk on laptop & recover funds with fresh sd card using seed words + static channel backup." + exit 1 + fi fi # delete everything but blockchain - echo "TODO: Delete everything but blockchain" + echo "Deleting everything on HDD/SSD while keeping blockchain ..." + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + if [ "${hddFormat}" != "btrfs" ]; then + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) + else + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) + fi + sudo ./config.scripts/blitz.datadrive.sh tempmount sda1 + sudo ./config.scripts/blitz.datadrive.sh clean -keepblockchain + sudo umount /mnt/hdd + sleep 2 # by keeping that blockchain - user choosed already the blockchain type + echo "Selecting as blockchain network automatically .." if [ "${hddBlocksLitecoin}" == "1" ]; then echo "network=litecoin" >> $SETUPFILE else From a77b943fd7b647a30c27b43ec6bdb05a2a419ad5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:08:58 -0500 Subject: [PATCH 213/293] improve setup dialog --- home.admin/_bootstrap.sh | 39 +++++++++++++++++--- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- home.admin/setup.scripts/eventInfoWait.sh | 28 ++++++++++++-- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 5b4735db7..31d26b2b1 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -433,6 +433,10 @@ if [ ${isMounted} -eq 0 ]; then done + ############################################# + # PROVISION PROCESS + ############################################# + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile if [ "${hddFormat}" != "btrfs" ]; then @@ -450,23 +454,46 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} #sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} #sed -i "s/^network=.*/network=${network}/g" ${infoFile} - echo "Calling Data Migration .." >> $logFile + echo "Calling Data Migration for possible updates .." >> $logFile sudo /home/admin/_bootstrap.update.sh echo "Calling Provisioning .." >> $logFile sudo /home/admin/_bootstrap.provision.sh - sed -i "s/^state=.*/state=reboot/g" ${infoFile} + sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} sed -i "s/^message=.*/message='Done Provision'/g" ${infoFile} # PROCESS raspiblitz.setup echo "TODO: After Provision Handling .." >> $logFile - # handle possible errors - # set passwords - # show seed words + ################################################### + # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR + # successfull update & recover can skip this + ################################################### + + until [ "${state}" == "waitfinal" ] + do + + # TODO: DETECT WHEN USER SETUP IS DONE + echo "TODO: DETECT WHEN USER FINAL DIALOG IS DONE" >> $logFile + + # handle possible errors + # set passwords + # show seed words + + # get latest network info & update raspiblitz.info (in case network changes) + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # give the loop a little bed time + sleep 4 + + # check info file for updated values + # especially the state for checking loop + source ${infoFile} + + done exit 0 - echo "rebooting" >> $logFile echo "state=recovered" >> /home/admin/recover.flag echo "shutdown in 1min" >> $logFile diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 6a6b2fd7f..9c0a65b48 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -30,7 +30,7 @@ case $CHOICE in # 2 --> SHUTDOWN clear echo "Shutting down without changes ..." - echo "Cut power when you see no status LED action anymore." + echo "Cut power when you see no status LED blinking anymore." exit 2 ;; *) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 2d7c629e5..5013642ba 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -79,12 +79,26 @@ elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "lcd" ]; then backtitle="${backtitle} / (pre-synced)" fi + # custom welcomeline for this dialog + welcomeline="Your RaspiBlitz is ready for Setup" + if [ "${setupPhase}" == "update" ]; then + welcomeline="RaspiBlitz is ready for Update" + fi + if [ "${setupPhase}" == "recovery" ]; then + welcomeline="RaspiBlitz is ready for Recovery" + fi + if [ "${setupPhase}" == "migration" ]; then + welcomeline="Ready for migration to RaspiBlitz" + fi + # show default login help info dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Login to your RaspiBlitz with: +${welcomeline} +------------------------------------ +Use terminal command to login: ssh admin@${localip} -Use password: raspiblitz -" 7 41 +password: raspiblitz +" 9 41 else @@ -97,6 +111,14 @@ Use password: raspiblitz " 8 41 fi +elif [ "${eventID}" == "waitfinal" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Setup-Done - Login for Details: +ssh admin@${localip} +Use your Password A +" 7 41 + elif [ "${eventID}" == "shutdown" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " From a75cf5f6b3a7ddaf9a49d08c40b1752f9780f4f8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:37:57 -0500 Subject: [PATCH 214/293] auto tempmount --- home.admin/config.scripts/blitz.datadrive.sh | 28 +++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 845693411..ffbecc393 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then >&2 echo "# managing the data drive(s) with old EXT4 or new BTRFS" - >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot|uasp-fix]" + >&2 echo "# blitz.datadrive.sh [status|tempmount|unmount|format|fstab|raid|link|swap|clean|snapshot|uasp-fix]" echo "error='missing parameters'" exit 1 fi @@ -1204,12 +1204,20 @@ if [ "$1" = "tempmount" ]; then exit 1 fi - # get device to temp mount + # get device to temp mount from parameter (optional) hdd=$2 - if [ ${#hdd} -eq 0 ]; then - >&2 echo "# FAIL which device should be temp mounted (e.g. sda)" - >&2 echo "# run 'status' to see device candidates" - echo "error='missing second parameter'" + # automount if no parameter the hddcandinate + if [ "${hdd}" == "" ]; then + if [ "${hddFormat}" != "btrfs" ]; then + hdd="${hddPartitionCandidate}" + else + hdd="${hddCandidate}" + fi + fi + # if still no hdd .. throw error + if [ "${hdd}" == "" ]; then + >&2 echo "# FAIL there is no detected hdd candidate to tempmount" + echo "error='hdd not found'" exit 1 fi @@ -1289,6 +1297,14 @@ if [ "$1" = "tempmount" ]; then fi +if [ "$1" = "unmount" ]; then + sudo umount /mnt/hdd 2>/dev/null + sudo umount /mnt/storage 2>/dev/null + sudo umount /mnt/temp 2>/dev/null + echo "# OK done unmount" + exit 1 +fi + ######################################## # LINKING all directories with ln ######################################## From 791fa077522a38002aada33fdb1f0c92b0f7b076 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:41:06 -0500 Subject: [PATCH 215/293] fix autotempmount --- home.admin/config.scripts/blitz.datadrive.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index ffbecc393..a0a99aa1e 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -1199,6 +1199,9 @@ fi if [ "$1" = "tempmount" ]; then + # get HDD status and candidates + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${isMounted} -eq 1 ]; then echo "error='already mounted'" exit 1 From 8b52baabdeaaf142ce1eab90dadfd6f634b9bb3e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:48:14 -0500 Subject: [PATCH 216/293] fix the cleanup --- .../setup.scripts/setupDialogControl.sh | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 26c2aa86f..73bf583bf 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -155,15 +155,21 @@ if [ "${setupPhase}" == "setup" ]; then # delete everything but blockchain echo "Deleting everything on HDD/SSD while keeping blockchain ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - if [ "${hddFormat}" != "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) - else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount) + if [ "${error}" != "" ]; then + echo "TEMPMOUNT FAILED:" + echo "${error}" + echo "Please report as issue on the raspiblitz github." + exit 1 fi - sudo ./config.scripts/blitz.datadrive.sh tempmount sda1 - sudo ./config.scripts/blitz.datadrive.sh clean -keepblockchain - sudo umount /mnt/hdd + sudo ./config.scripts/blitz.datadrive.sh clean all -keepblockchain + if [ "${error}" != "" ]; then + echo "CLEANING HDD FAILED:" + echo "${error}" + echo "Please report as issue on the raspiblitz github." + exit 1 + fi + sudo /home/admin/config.scripts/blitz.datadrive.sh umount sleep 2 # by keeping that blockchain - user choosed already the blockchain type From 8ab321b79871f6b301027ad787c151741c96f3d7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:53:37 -0500 Subject: [PATCH 217/293] fix clean script with ssd --- home.admin/config.scripts/blitz.datadrive.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index a0a99aa1e..bd987a18c 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -49,7 +49,7 @@ fi isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(sudo btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE') isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") -isSSD="Unknown" +isSSD="0" # determine if swap is external on or not externalSwapPath="/mnt/hdd/swapfile" @@ -1526,6 +1526,9 @@ if [ "$1" = "clean" ]; then >&2 echo "# RASPIBLITZ DATA DRIVES - CLEANING" + # get HDD status + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${isMounted} -eq 0 ]; then >&2 echo "# FAIL: cannot clean - the drive is not mounted'" echo "error='not mounted'" @@ -1536,9 +1539,9 @@ if [ "$1" = "clean" ]; then sudo apt-get install -y secure-delete 1>/dev/null >&2 echo - >&2 echo "# IMPORTANT: There is no 100% guarantee that sensitive data is completely deleted!" - >&2 echo "# see: https://www.davescomputers.com/securely-deleting-files-solid-state-drive/" - >&2 echo "# see: https://unix.stackexchange.com/questions/62345/securely-delete-files-on-btrfs-filesystem" + >&2 echo "# IMPORTANT: No 100% guarantee that sensitive data is completely deleted!" + # see: https://www.davescomputers.com/securely-deleting-files-solid-state-drive/" + # see: https://unix.stackexchange.com/questions/62345/securely-delete-files-on-btrfs-filesystem" >&2 echo "# --> Dont resell or gift data drive. Destroy physically if needed." >&2 echo @@ -1581,7 +1584,7 @@ if [ "$1" = "clean" ]; then fi # on SSDs never shredd # https://www.davescomputers.com/securely-deleting-files-solid-state-drive/ - if [ ${isSSD} -eq 1 ]; then + if [ "${isSSD}" == "1" ]; then whenDeleteSchredd=0 fi From 12b23f8d16b4ff00cfafc2f33830816ce20f9843 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:55:23 -0500 Subject: [PATCH 218/293] fix command --- home.admin/setup.scripts/setupDialogControl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 73bf583bf..54ceb2fe7 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -169,7 +169,7 @@ if [ "${setupPhase}" == "setup" ]; then echo "Please report as issue on the raspiblitz github." exit 1 fi - sudo /home/admin/config.scripts/blitz.datadrive.sh umount + sudo /home/admin/config.scripts/blitz.datadrive.sh unmount sleep 2 # by keeping that blockchain - user choosed already the blockchain type From 93fb499ebd1e15623e313e4b0de2027b188abe7a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:58:20 -0500 Subject: [PATCH 219/293] fix script --- home.admin/setup.scripts/setupDialogControl.sh | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 54ceb2fe7..ad784b916 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -155,14 +155,8 @@ if [ "${setupPhase}" == "setup" ]; then # delete everything but blockchain echo "Deleting everything on HDD/SSD while keeping blockchain ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount) - if [ "${error}" != "" ]; then - echo "TEMPMOUNT FAILED:" - echo "${error}" - echo "Please report as issue on the raspiblitz github." - exit 1 - fi - sudo ./config.scripts/blitz.datadrive.sh clean all -keepblockchain + sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount + sudo /home/admin/config.scripts/blitz.datadrive.sh clean all -keepblockchain if [ "${error}" != "" ]; then echo "CLEANING HDD FAILED:" echo "${error}" From 656fd802549be094b80313489b87323cc545de4d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 10:59:13 -0500 Subject: [PATCH 220/293] remove debug on clean --- home.admin/setup.scripts/setupDialogControl.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index ad784b916..065b961ac 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -174,9 +174,6 @@ if [ "${setupPhase}" == "setup" ]; then echo "network=bitcoin" >> $SETUPFILE fi - # DEBUG EXIT - exit 1 - else # STOP SETUP - loop back to setup menu start From 5a4476e186b73d1e16a573c850bac54bb2e26477 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 11:12:09 -0500 Subject: [PATCH 221/293] debug info --- home.admin/setup.scripts/eventInfoWait.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 5013642ba..2ed235f11 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -102,6 +102,9 @@ password: raspiblitz else + # custom backtitle for this dialog + backtitle="RaspiBlitz ${codeVersion} / ${setupPhase}" + # on all other cases (add info message) dialog --backtitle "${backtitle}" --cr-wrap --infobox " Login for Maintenance: From ed7e9427223a2205f92e030e886fc81657a5c319 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 11:12:49 -0500 Subject: [PATCH 222/293] fix syntax --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 2ed235f11..a9da465d6 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -69,7 +69,7 @@ Use your Password A elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "lcd" ]; then - if [ "${setupPhase}" == "setup"] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then + if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then # custom backtitle for this dialog backtitle="RaspiBlitz ${codeVersion} / ${setupPhase}" From 72ecb20621b781bc0bab5782001e352a16416dbb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 11:21:56 -0500 Subject: [PATCH 223/293] patch kickstart provision --- home.admin/_bootstrap.sh | 12 ++++++------ home.admin/setup.scripts/setupDialogControl.sh | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 31d26b2b1..9bcf1cd32 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -449,27 +449,27 @@ if [ ${isMounted} -eq 0 ]; then echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link + # copy over the raspiblitz.conf created from setup to HDD + sudo cp /var/cache/raspiblitz/temp/raspiblitz.conf /mnt/hdd/raspiblitz.conf + # kick-off provision process sed -i "s/^state=.*/state=provision/g" ${infoFile} sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} #sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} #sed -i "s/^network=.*/network=${network}/g" ${infoFile} + + # errors from this process will be refelcted ins state / message of raspiblitz.info echo "Calling Data Migration for possible updates .." >> $logFile sudo /home/admin/_bootstrap.update.sh echo "Calling Provisioning .." >> $logFile sudo /home/admin/_bootstrap.provision.sh - sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} - sed -i "s/^message=.*/message='Done Provision'/g" ${infoFile} - - # PROCESS raspiblitz.setup - echo "TODO: After Provision Handling .." >> $logFile ################################################### # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR # successfull update & recover can skip this ################################################### - until [ "${state}" == "waitfinal" ] + until [ "${state}" != "ready" ] do # TODO: DETECT WHEN USER SETUP IS DONE diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 065b961ac..e2370ded5 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -251,7 +251,7 @@ if [ "${setupPhase}" == "setup" ]; then source $SETUPFILE # prepare config file - CONFIGFILE="/mnt/hdd/raspiblitz.conf" + CONFIGFILE="/var/cache/raspiblitz/temp/raspiblitz.conf" sudo rm $CONFIGFILE 2>/dev/null sudo chown admin:admin $CONFIGFILE sudo chmod 777 $CONFIGFILE From f1805b451e352cb99324437e69933498477e8b85 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 11:33:12 -0500 Subject: [PATCH 224/293] add error screen --- home.admin/setup.scripts/eventInfoWait.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index a9da465d6..e8c72d43e 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -51,6 +51,16 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 +elif [ "${eventID}" == "error" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +SYSTEM RAN INTO AN ERROR: +${contentString} +------------------------------------ +Use terminal command to login: +ssh admin@${localip} +" 9 41 + elif [ "${eventID}" == "provision" ] || [ "${eventID}" == "recovering" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " @@ -195,7 +205,7 @@ Please connect a ${contentWords[0]} HDD or SSD to the device. " 7 35 -elif [ "${eventID}" == "erroHDD" ]; then +elif [ "${eventID}" == "errorHDD" ]; then # contentString --> detail error message dialog --backtitle "${backtitle}" --cr-wrap --infobox " From 0e2e311177adfe6e882890245d1723ec72762a5e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 11:37:34 -0500 Subject: [PATCH 225/293] check results of provison --- home.admin/_bootstrap.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 9bcf1cd32..d2fb7010e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -461,8 +461,10 @@ if [ ${isMounted} -eq 0 ]; then # errors from this process will be refelcted ins state / message of raspiblitz.info echo "Calling Data Migration for possible updates .." >> $logFile sudo /home/admin/_bootstrap.update.sh - echo "Calling Provisioning .." >> $logFile - sudo /home/admin/_bootstrap.provision.sh + if [ "$?" == "0" ]; then + echo "Calling Provisioning .." >> $logFile + sudo /home/admin/_bootstrap.provision.sh + fi ################################################### # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR From 68a2ee313a6d32bad621c38272efc2bf4eb832c8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 18:10:10 -0500 Subject: [PATCH 226/293] ssh error name --- home.admin/setup.scripts/eventInfoWait.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index e8c72d43e..ae56cc026 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -51,7 +51,7 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 -elif [ "${eventID}" == "error" ]; then +elif [ "${eventID}" == "error" ] && [ "${mode}" == "lcd" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " SYSTEM RAN INTO AN ERROR: @@ -61,6 +61,17 @@ Use terminal command to login: ssh admin@${localip} " 9 41 +elif [ "${eventID}" == "error" ] && [ "${mode}" == "ssh" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +SYSTEM RAN INTO AN ERROR: +${contentString} + +Please report to the Raspiblitz GitHub +Use CTRL+C to exit to terminal. +For shutdown use command: off +" 9 50 + elif [ "${eventID}" == "provision" ] || [ "${eventID}" == "recovering" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " From e03bf9edb61c505d1843a8ed5dadbbc67fd67c0c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 18:20:57 -0500 Subject: [PATCH 227/293] add hostname to configfile --- home.admin/setup.scripts/setupDialogControl.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index e2370ded5..b3a43e935 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -263,6 +263,7 @@ if [ "${setupPhase}" == "setup" ]; then echo "lightning=${lightning}" >> $CONFIGFILE echo "network=${network}" >> $CONFIGFILE echo "chain=main" >> $CONFIGFILE + echo "hostname='${hostname}'" >> $CONFIGFILE echo "runBehindTor=on" >> $CONFIGFILE # user needs to set all passwords From 0bf696a04609e28befa7083eac3ddf6a27fc96cc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 18:38:36 -0500 Subject: [PATCH 228/293] write user chopice to raspiblitz.info --- home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index b3a43e935..794c86da7 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -47,6 +47,7 @@ if [ "${setupPhase}" == "recovery" ]; then else # default to normal setup options setupPhase="setup" + sudo sed -i "s/^=setupPhase.*/state=setupPhase/g" /home/admin/raspiblitz.info echo "# you refused recovery option - defaulting to normal setup" fi fi @@ -68,6 +69,7 @@ if [ "${setupPhase}" == "migration" ]; then else # on cancel - default to normal setup setupPhase="setup" + sudo sed -i "s/^=setupPhase.*/state=setupPhase/g" /home/admin/raspiblitz.info echo "# you refused node migration option - defaulting to normal setup" exit 1 fi From 5b1c85266148fc69e3424703a88c647034ad3363 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 23 May 2021 23:38:12 -0500 Subject: [PATCH 229/293] setup provision --- home.admin/30initHDD.sh | 2 + home.admin/40addHDD.sh | 3 + home.admin/50syncHDD.sh | 3 + home.admin/60finishHDD.sh | 2 + home.admin/70initLND.sh | 14 +- home.admin/80scanLND.sh | 2 + home.admin/90finishSetup.sh | 2 + home.admin/91addBonus.sh | 2 + home.admin/95finalSetup.sh | 2 + home.admin/_background.sh | 2 +- home.admin/_bootstrap.sh | 48 ++- home.admin/_provision.migration.sh | 54 +++ home.admin/_provision.setup.sh | 355 ++++++++++++++++++ ...otstrap.update.sh => _provision.update.sh} | 3 + ..._bootstrap.provision.sh => _provision_.sh} | 0 home.admin/assets/bitcoin.conf | 6 +- 16 files changed, 477 insertions(+), 23 deletions(-) create mode 100755 home.admin/_provision.migration.sh create mode 100755 home.admin/_provision.setup.sh rename home.admin/{_bootstrap.update.sh => _provision.update.sh} (99%) rename home.admin/{_bootstrap.provision.sh => _provision_.sh} (100%) diff --git a/home.admin/30initHDD.sh b/home.admin/30initHDD.sh index fb7a9dc04..67ff0f2d4 100755 --- a/home.admin/30initHDD.sh +++ b/home.admin/30initHDD.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: should be good to be deleted - its now done in bootstrap and setupcontroller + ## get basic info source /home/admin/raspiblitz.info diff --git a/home.admin/40addHDD.sh b/home.admin/40addHDD.sh index 261bdcb23..c1068adac 100755 --- a/home.admin/40addHDD.sh +++ b/home.admin/40addHDD.sh @@ -1,5 +1,8 @@ #!/bin/bash +# TODO: should be good to be deleted - it now done in _provision.setup.sh or _provision_.sh +# ---> the experimental "adding RAID drive" section for BRTFS gets dropped here + ## get basic info source /home/admin/raspiblitz.info diff --git a/home.admin/50syncHDD.sh b/home.admin/50syncHDD.sh index 6e14b6fcd..71e152556 100755 --- a/home.admin/50syncHDD.sh +++ b/home.admin/50syncHDD.sh @@ -1,5 +1,8 @@ #!/bin/bash +# TODO: should be good to be deleted - it now done in _provision.setup.sh +# --- BUT check how its used in repair script + ## get basic info source /home/admin/raspiblitz.info diff --git a/home.admin/60finishHDD.sh b/home.admin/60finishHDD.sh index 02564cc27..bad71f96f 100755 --- a/home.admin/60finishHDD.sh +++ b/home.admin/60finishHDD.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: should be good to be deleted - it now done in _provision.setup.sh + ## get basic info source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf diff --git a/home.admin/70initLND.sh b/home.admin/70initLND.sh index d75117afa..a43247440 100755 --- a/home.admin/70initLND.sh +++ b/home.admin/70initLND.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: should be good to be deleted - it now done in _provision.setup.sh and setup dialogs + ## get basic info source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf @@ -78,17 +80,7 @@ while [ ${chainIsReady} -eq 0 ] echo "*** Check LND Config ***" configExists=$( sudo ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c lnd.conf ) if [ ${configExists} -eq 0 ]; then - echo "Creating LND config ..." - sudo mkdir /mnt/hdd/lnd 2> /dev/null - sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd - sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf - sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf - if [ -d /home/bitcoin/.lnd ]; then - echo "OK - LND config written" - else - echo "FAIL - Was not able to setup LND" - exit 1 - fi + else echo "OK - exists" fi diff --git a/home.admin/80scanLND.sh b/home.admin/80scanLND.sh index 38a8065c9..3cb945f00 100755 --- a/home.admin/80scanLND.sh +++ b/home.admin/80scanLND.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: CHECK IF IS NOW REPLACED BY NEW EVENT WAIT DIALOGS + source /home/admin/_version.info source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf diff --git a/home.admin/90finishSetup.sh b/home.admin/90finishSetup.sh index e1356f8f1..c9741bf1e 100755 --- a/home.admin/90finishSetup.sh +++ b/home.admin/90finishSetup.sh @@ -1,6 +1,8 @@ #!/bin/bash echo "" +# TODO: COPY OVER COMPLETLY INTO _provison_.sh + # add bonus scripts (auto install deactivated to reduce third party repos) /home/admin/91addBonus.sh diff --git a/home.admin/91addBonus.sh b/home.admin/91addBonus.sh index 9287c512d..370180c6e 100755 --- a/home.admin/91addBonus.sh +++ b/home.admin/91addBonus.sh @@ -1,4 +1,6 @@ +# TODO: COPY OVER COMPLETLY INTO _provison_.sh + mkdir /home/admin/tmpScriptDL cd /home/admin/tmpScriptDL echo "installing bash completion for bitcoin-cli and lncli" diff --git a/home.admin/95finalSetup.sh b/home.admin/95finalSetup.sh index 6c4c9c3ee..d6d466048 100755 --- a/home.admin/95finalSetup.sh +++ b/home.admin/95finalSetup.sh @@ -1,6 +1,8 @@ #!/bin/bash echo "" +# TODO: should be good to be deleted - it now done in _provision.setup.sh and setup dialogs + # load setup config source /home/admin/raspiblitz.info diff --git a/home.admin/_background.sh b/home.admin/_background.sh index 32b46fc25..077cf1830 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -408,7 +408,7 @@ do recheckIBD=$((($counter % 60)+1)) if [ ${recheckIBD} -eq 1 ]; then # check if flag exists (got created on 50syncHDD.sh) - flagExists=$(ls /home/admin/selfsync.flag 2>/dev/null | grep -c "selfsync.flag") + flagExists=$(ls /mnt/hdd/${network}/blocks/selfsync.flag 2>/dev/null | grep -c "selfsync.flag") if [ ${flagExists} -eq 1 ]; then finishedIBD=$(sudo -u bitcoin ${network}-cli getblockchaininfo | grep "initialblockdownload" | grep -c "false") if [ ${finishedIBD} -eq 1 ]; then diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d2fb7010e..b48bc4f10 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -437,6 +437,9 @@ if [ ${isMounted} -eq 0 ]; then # PROVISION PROCESS ############################################# + # refresh data from info file + source ${infoFile} + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile if [ "${hddFormat}" != "btrfs" ]; then @@ -455,15 +458,42 @@ if [ ${isMounted} -eq 0 ]; then # kick-off provision process sed -i "s/^state=.*/state=provision/g" ${infoFile} sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} - #sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} - #sed -i "s/^network=.*/network=${network}/g" ${infoFile} - # errors from this process will be refelcted ins state / message of raspiblitz.info - echo "Calling Data Migration for possible updates .." >> $logFile - sudo /home/admin/_bootstrap.update.sh - if [ "$?" == "0" ]; then - echo "Calling Provisioning .." >> $logFile - sudo /home/admin/_bootstrap.provision.sh + # if setup - run provision setup first + if [ "${setupPhase}" == "setup" ]; then + echo "Calling _bootstrap.setup.sh for basic setup tasks .." >> $logFile + sudo /home/admin/_provision.setup.sh + if [ "$?" != "0" ]; then + echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + exit 1 + fi + fi + + # if update - run provision update migration first + if [ "${setupPhase}" == "update" ]; then + echo "Calling _bootstrap.update.sh for possible update migrations .." >> $logFile + sudo /home/admin/_provision.update.sh + if [ "$?" != "0" ]; then + echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + exit 1 + fi + fi + + # if update - run provision update migration first + if [ "${setupPhase}" == "migration" ]; then + echo "Calling _bootstrap.migration.sh for possible update migrations .." >> $logFile + sudo /home/admin/_provision.migration.sh + if [ "$?" != "0" ]; then + echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + exit 1 + fi + fi + + echo "Calling _bootstrap.provision.sh for general system provisioning .." >> $logFile + sudo /home/admin/_provision_.sh + if [ "$?" != "0" ]; then + echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + exit 1 fi ################################################### @@ -477,8 +507,8 @@ if [ ${isMounted} -eq 0 ]; then # TODO: DETECT WHEN USER SETUP IS DONE echo "TODO: DETECT WHEN USER FINAL DIALOG IS DONE" >> $logFile + # offer option to COPY BLOCKHCAIN (see 50copyHDD.sh) # handle possible errors - # set passwords # show seed words # get latest network info & update raspiblitz.info (in case network changes) diff --git a/home.admin/_provision.migration.sh b/home.admin/_provision.migration.sh new file mode 100755 index 000000000..6105fa135 --- /dev/null +++ b/home.admin/_provision.migration.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# LOGFILE - store debug logs of bootstrap +logFile="/home/admin/raspiblitz.log" + +# INFOFILE - state data from bootstrap +infoFile="/home/admin/raspiblitz.info" +source ${infoFile} + +# CONFIGFILE - configuration of RaspiBlitz +configFile="/mnt/hdd/raspiblitz.conf" + +# load old or init raspiblitz config +# debug info +echo "STARTED Migration --> see logs in ${logFile}" +echo "STARTED Migration" >> ${logFile} +sudo sed -i "s/^message=.*/message='Provision Migration'/g" ${infoFile} + +if [ "${hddGotMigrationData}" == "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing hddGotMigrationData'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: missing hddGotMigrationData in (${infoFile})!" >> ${logFile} + exit 1 +fi + +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + +err="" +nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]") +echo "**************************************************" >> ${logFile} +echo "MIGRATION FROM ${nodenameUpperCase} TO RASPIBLITZ" >> ${logFile} +echo "**************************************************" >> ${logFile} +echo "- started ..." >> ${logFile} +source <(sudo /home/admin/config.scripts/blitz.migration.sh migration-${hddGotMigrationData}) +if [ "${err}" != "" ]; then + echo "MIGRATION FAILED: ${err}" >> ${logFile} + echo "Format data disk on laptop & recover funds with fresh sd card using seed words + static channel backup." >> ${logFile} + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='migration failed'/g" ${infoFile} + exit 1 +fi + +# if free space is lower than 100GB (100000000) delete backup files +if [ "${hddDataFreeKB}" != "" ] && [ ${hddDataFreeKB} -lt 407051412 ]; then + echo "- free space of data disk is low ... deleting 'backup_migration'" >> ${logFile} + sudo rm -R /mnt/hdd/backup_migration +else + echo "- old data of ${nodenameUpperCase} can be found in '/mnt/hdd/backup_migration'" >> ${logFile} +fi +echo "OK MIGRATION" >> ${logFile} +echo "END Migration" >> ${logFile} +exit 0 + diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh new file mode 100755 index 000000000..14eeaa8b9 --- /dev/null +++ b/home.admin/_provision.setup.sh @@ -0,0 +1,355 @@ +#!/bin/bash + +# LOGFILE - store debug logs of bootstrap +logFile="/home/admin/raspiblitz.log" + +# INFOFILE - state data from bootstrap +infoFile="/home/admin/raspiblitz.info" +source ${infoFile} + +# SETUPFILE - setup data of RaspiBlitz +setupFile="/var/cache/raspiblitz/temp/raspiblitz.setup" +source ${setupFile} + +# CONFIGFILE - configuration of RaspiBlitz +configFile="/mnt/hdd/raspiblitz.conf" +source ${configFile} + +# load old or init raspiblitz config +# debug info +echo "STARTED Setup --> see logs in ${logFile}" +echo "STARTED Setup" >> ${logFile} +sudo sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile} + +################################### +# Set Password A + +if [ "${passwordA}" == "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing passwordA'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: missing passwordA in (${setupFile})!" >> ${logFile} + exit 1 +fi + +sudo /home/admin/config.scripts/blitz.setpassword.sh a "${passwordA}" >> ${logFile} + +################################### +# Preserve SSH keys +# just copy dont link anymore +# see: https://github.com/rootzoll/raspiblitz/issues/1798 + +# link ssh directory from SD card to HDD +echo "# --> SSH key settings" >> ${logFile} +echo "# copying SSH pub keys to HDD" >> ${logFile} +sudo cp -r /etc/ssh /mnt/hdd/ssh >> ${logFile} +echo "# OK" >> ${logFile} + +################################### +# Prepare Blockchain Service + +if [ "${network}" == "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing network'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: missing network in (${setupFile})!" >> ${logFile} + exit 1 +fi + +if [ "${chain}" == "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing chain'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: missing chain in (${setupFile})!" >> ${logFile} + exit 1 +fi + +# make sure choosen blockchain service is installed +if [ "${network}" != "bitcoin" ]; then + # TODO also ... check if /home/admin/selfsync.flag is needed on other chains + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='TODO: install ${network}'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "TODO: make sure ${network} is installed!" >> ${logFile} + exit 1 +fi + +# copy configs files and directories +echo "" +echo "*** Prepare ${network} ***" >> ${logFile} +sudo -u bitcoin mkdir /mnt/hdd/${network} 2>/dev/null +sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null +sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null +sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf +sudo mkdir /home/admin/.${network} 2>/dev/null +sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf + +# optimize RAM for blockchain validation (bitcoin only) +if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then + echo "*** Optimizing RAM for Sync ***" >> ${logFile} + kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') + echo "dont forget to reduce dbcache once IBD is done" > "/mnt/hdd/${network}/blocks/selfsync.flag" + # RP4 4GB + if [ ${kbSizeRAM} -gt 3500000 ]; then + echo "Detected RAM >=4GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=3072/g" /mnt/hdd/${network}/${network}.conf + # RP4 2GB + elif [ ${kbSizeRAM} -gt 1500000 ]; then + echo "Detected RAM >=2GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=1536/g" /mnt/hdd/${network}/${network}.conf + #RP3/4 1GB + else + echo "Detected RAM <=1GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/${network}/${network}.conf + fi +fi + +# start network service +echo "" +echo "*** Start ${network} ***" >> ${logFile} +echo "- This can take a while .." >> ${logFile} +sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service +#sudo chmod +x /etc/systemd/system/${network}d.service +sudo systemctl daemon-reload >> ${logFile} +sudo systemctl enable ${network}d.service >> ${logFile} +sudo systemctl start ${network}d.service >> ${logFile} + +# check if bitcoin has started +bitcoinRunning=0 +loopcount=0 +while [ ${bitcoinRunning} -eq 0 ] +do + >&2 echo "# (${loopcount}/200) checking if ${network}d is running ... " >> ${logFile} + bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) + sleep 2 + sync + loopcount=$(($loopcount +1)) + if [ ${loopcount} -gt 200 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: failed ${network}'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: failed ${network}" >> ${logFile} + exit 1 + fi +done + + +################################### +# Prepare Lightning + +if [ "${lightning}" == "lnd" ]; then + + ################################### + # LND + + if [ "${passwordC}" == "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='config: missing passwordC'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: missing passwordC in (${setupFile})!" >> ${logFile} + exit 1 + fi + + # if user uploaded an LND rescue file + if [ "${lndrescue}" != "" ]; then + echo "Restore LND data from uploaded rescue file ${lndrescue} ..." >> ${logFile} + source <(sudo /home/admin/config.scripts/lnd.backup.sh lnd-import ${lndrescue}) + if [ "${error}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd import backup failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd import backup failed" >> ${logFile} + echo "${error}" >> ${logFile} + exit 1 + fi + else + # preparing new LND config + echo "Creating new LND config ..." >> ${logFile} + sudo -u bitcoin mkdir /mnt/hdd/lnd 2> /dev/null + sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf + sudo /home/admin/config.scripts/lnd.setname.sh ${hostname} + fi + + # check if now a config exists + configLinkedCorrectly=$(sudo ls sudo ls /home/bitcoin/.lnd/lnd.conf | grep -c "lnd.conf") + if [ "${configLinkedCorrectly}" != "1" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd conf link broken'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd conf link broken" >> ${logFile} + exit 1 + fi + + # Init LND service & start + echo "*** Init LND Service & Start ***" >> ${logFile} + + # just in case + sudo systemctl stop lnd 2>/dev/null + sudo systemctl disable lnd 2>/dev/null + + # make sure lnd gets started after blockchain service + sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} + sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} + sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} + sudo /home/admin/config.scripts/internet.tor.sh lndconf-on >> ${logFile} + + # start lnd up + echo "Starting LND Service ..." >> ${logFile} + sudo systemctl enable lnd >> ${logFile} + sudo systemctl start lnd >> ${logFile} + + # check that lnd started + lndRunning=0 + loopcount=0 + while [ ${lndRunning} -eq 0 ] + do + lndRunning=$(sudo systemctl status lnd.service | grep -c running) + if [ ${lndRunning} -eq 0 ]; then + date +%s >> ${logFile} + echo "LND not ready yet ... waiting another 60 seconds." >> ${logFile} + sleep 10 + fi + loopcount=$(($loopcount +1)) + if [ ${loopcount} -gt 100 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: failed lnd start'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: failed lnd start" >> ${logFile} + exit 1 + fi + done + echo "OK - LND is running" ${logFile} + sleep 10 + + # Check LND health/fails (to be extended) + tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert") + if [ ${tlsExists} -eq 0 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: missing lnd tls'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: missing lnd tls" >> ${logFile} + exit 1 + fi + + # import static channel backup if was uploaded + if [ "${staticchannelbackup}" != "" ]; then + echo "Preparing static channel backup file ${staticchannelbackup} ..." >> ${logFile} + source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import ${staticchannelbackup}) + if [ "${error}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd import SCB failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd import SCB failed" >> ${logFile} + echo "${error}" >> ${logFile} + exit 1 + fi + fi + + # WALLET --> SEED + SCB + if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; the + + sudo /home/admin/config.scripts/lnd.initwallet.py scb ${passwordC} "${seedWords}" "${staticchannelbackup}" ${seedPassword} + if [ "${err}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd wallet SCB failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd wallet SCB failed" >> ${logFile} + echo "${err}" >> ${logFile} + echo "${errMore}" >> ${logFile} + exit 1 + fi + + # WALLET --> SEED + elif [ "${seedWords}" != "" ] + + sudo /home/admin/config.scripts/lnd.initwallet.py seed ${passwordC} "${seedWords}" ${seedPassword} + if [ "${err}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile} + echo "${err}" >> ${logFile} + echo "${errMore}" >> ${logFile} + exit 1 + fi + + # WALLET --> NEW + else + + source <(sudo /home/admin/config.scripts/lnd.initwallet.py new ${passwordC}) + if [ "${err}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile} + echo "${err}" >> ${logFile} + echo "${errMore}" >> ${logFile} + exit 1 + fi + + # write created seedwords into SETUPFILE to be displayed to user on final setup later + echo "seedwordsNEW=${seedwords}" >> ${setupFile} + echo "seedwords6x4NEW=${seedwords6x4}" >> ${setupFile} + + fi + + # sync macaroons & TLS to other users + echo "*** Copy LND Macaroons to user admin ***" >> ${logFile} + + # make sure wallet is unlocked + sleep 3 + /home/admin/config.scripts/lnd.unlock.sh "${passwordC}" + sleep 3 + + # check if macaroon exists now - if not fail + macaroonExists=$(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon) + if [ ${macaroonExists} -eq 0 ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd no macaroons'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd no macaroons" >> ${logFile} + exit 1 + fi + + # now sync macaroons & TLS zo other users + sudo /home/admin/config.scripts/lnd.credentials.sh sync + + # unlock Wallet (if needed) + echo "*** Check Wallet Lock ***" + locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) + if [ ${locked} -gt 0 ]; then + echo "OK - Wallet is locked ... starting unlocking dialog" + /home/admin/config.scripts/lnd.unlock.sh + else + echo "OK - Wallet is already unlocked" + fi + + # make a final lnd check + source <(/home/admin/config.scripts/lnd.check.sh basic-setup) + if [ "${err}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile} + echo "${err}" >> ${logFile} + exit 1 + fi + +fi + +if [ "${lightning}" == "cln" ]; then + + ################################### + # c-lightning + + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='TODO: install c-lightning'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "TODO: install c-lightning!" >> ${logFile} + exit 1 +fi + +echo "END Setup" >> ${logFile} +exit 0 + diff --git a/home.admin/_bootstrap.update.sh b/home.admin/_provision.update.sh similarity index 99% rename from home.admin/_bootstrap.update.sh rename to home.admin/_provision.update.sh index c854ed0e9..d4cf01569 100755 --- a/home.admin/_bootstrap.update.sh +++ b/home.admin/_provision.update.sh @@ -9,6 +9,9 @@ infoFile="/home/admin/raspiblitz.info" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" +# SETUPFILE - configuration of RaspiBlitz +setupFile="/mnt/hdd/raspiblitz.conf" + # debug info echo "STARTED Update/Init --> see logs in ${logFile}" echo "STARTED Update/Init" >> ${logFile} diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_provision_.sh similarity index 100% rename from home.admin/_bootstrap.provision.sh rename to home.admin/_provision_.sh diff --git a/home.admin/assets/bitcoin.conf b/home.admin/assets/bitcoin.conf index 6c92fbf6e..45fbe80b3 100755 --- a/home.admin/assets/bitcoin.conf +++ b/home.admin/assets/bitcoin.conf @@ -13,9 +13,11 @@ peerbloomfilters=1 # Connection settings rpcuser=raspibolt rpcpassword=passwordB -rpcport=8332 +main.rpcport=8332 +test.rpcport=18332 rpcallowip=127.0.0.1 -rpcbind=127.0.0.1:8332 +main.rpcbind=127.0.0.1:8332 +test.rpcbind=127.0.0.1:18332 zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333 From a9196e2534b05361385fa2d2db3e82634445aca4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 24 May 2021 13:09:51 -0500 Subject: [PATCH 230/293] add debug outputs --- home.admin/_provision.migration.sh | 9 +++++---- home.admin/_provision.setup.sh | 9 +++++---- home.admin/_provision.update.sh | 10 ++++++---- home.admin/_provision_.sh | 8 +++++--- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/home.admin/_provision.migration.sh b/home.admin/_provision.migration.sh index 6105fa135..687e2f631 100755 --- a/home.admin/_provision.migration.sh +++ b/home.admin/_provision.migration.sh @@ -10,10 +10,11 @@ source ${infoFile} # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" -# load old or init raspiblitz config -# debug info -echo "STARTED Migration --> see logs in ${logFile}" -echo "STARTED Migration" >> ${logFile} +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision.migration.sh" >> ${logFile} +echo "###################################" >> ${logFile} sudo sed -i "s/^message=.*/message='Provision Migration'/g" ${infoFile} if [ "${hddGotMigrationData}" == "" ]; then diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 14eeaa8b9..583dc90e0 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -15,10 +15,11 @@ source ${setupFile} configFile="/mnt/hdd/raspiblitz.conf" source ${configFile} -# load old or init raspiblitz config -# debug info -echo "STARTED Setup --> see logs in ${logFile}" -echo "STARTED Setup" >> ${logFile} +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision.setup.sh" >> ${logFile} +echo "###################################" >> ${logFile} sudo sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile} ################################### diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index d4cf01569..6cc736ee2 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -12,10 +12,12 @@ configFile="/mnt/hdd/raspiblitz.conf" # SETUPFILE - configuration of RaspiBlitz setupFile="/mnt/hdd/raspiblitz.conf" -# debug info -echo "STARTED Update/Init --> see logs in ${logFile}" -echo "STARTED Update/Init" >> ${logFile} -sudo sed -i "s/^message=.*/message='Running Data Migration'/g" ${infoFile} +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision.update.sh" >> ${logFile} +echo "###################################" >> ${logFile} +sudo sed -i "s/^message=.*/message='Running Data Update'/g" ${infoFile} # HDD BTRFS RAID REPAIR IF NEEDED source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index e01307999..e0bf64b79 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -14,9 +14,11 @@ infoFile="/home/admin/raspiblitz.info" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" -# debug info -echo "STARTED Provisioning --> see logs in ${logFile}" -echo "STARTED Provisioning from preset config file" >> ${logFile} +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision_.sh" >> ${logFile} +echo "###################################" >> ${logFile} sudo sed -i "s/^message=.*/message='Provisioning from Config'/g" ${infoFile} # check if there is a config file From 34b6028797357ff6e787256a06ba310a271d96f4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 24 May 2021 13:21:26 -0500 Subject: [PATCH 231/293] just one time loop info & debug info --- home.admin/_bootstrap.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b48bc4f10..d7ef49f61 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -401,12 +401,10 @@ if [ ${isMounted} -eq 0 ]; then # until SSH or WEBUI setup data is available ############################################# + echo "## WAIT LOOP: USER SETUP/UPDATE/MIGRATION" >> $logFile until [ "${state}" == "waitprovision" ] do - # TODO: DETECT WHEN USER SETUP IS DONE - echo "TODO: DETECT WHEN USER SETUP IS DONE hddError(${hddError}) hddCandidate(${hddCandidate})" >> $logFile - # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} @@ -439,6 +437,7 @@ if [ ${isMounted} -eq 0 ]; then # refresh data from info file source ${infoFile} + echo "# PROVISION PROCESS with setupPhase(${setupPhase})" # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile @@ -458,7 +457,7 @@ if [ ${isMounted} -eq 0 ]; then # kick-off provision process sed -i "s/^state=.*/state=provision/g" ${infoFile} sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} - + # if setup - run provision setup first if [ "${setupPhase}" == "setup" ]; then echo "Calling _bootstrap.setup.sh for basic setup tasks .." >> $logFile From c0834b05fd14e8c56c701b5b02e778e679e17094 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 24 May 2021 13:41:58 -0500 Subject: [PATCH 232/293] patch HDD recommended --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d7ef49f61..db3d530cf 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -266,7 +266,7 @@ do sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} - sed -i "s/^message=.*/message='>500GB'/g" ${infoFile} + sed -i "s/^message=.*/message='>=1TB'/g" ${infoFile} fi # get latest network info & update raspiblitz.info (in case network changes) From 1a38d5057f91480c52c0b85814a6297c76545cb0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 24 May 2021 14:06:33 -0500 Subject: [PATCH 233/293] remove fs expand (done now in bootstrap) --- home.admin/_provision_.sh | 72 --------------------------------------- 1 file changed, 72 deletions(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index e0bf64b79..c620a0b4f 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -34,78 +34,6 @@ if [ ${parameterExists} -eq 0 ]; then echo "lndExtraParameter=''" >> ${configFile} fi -# check if file system was expanded to full capacity and sd card is bigger than 8GB -# see: https://github.com/rootzoll/raspiblitz/issues/936 -echo "CHECK IF SD CARD NEEDS EXPANSION" >> ${logFile} -source ${infoFile} - -# remember the DisplayClass from info file - before its gets overwritten by raspiblitz.conf to detect change -infoFileDisplayClass="${displayClass}" - -minimumSizeByte=8192000000 -rootPartition=$(sudo mount | grep " / " | cut -d " " -f 1 | cut -d "/" -f 3) -rootPartitionBytes=$(lsblk -b -o NAME,SIZE | grep "${rootPartition}" | tr -s ' ' | cut -d " " -f 2) - -echo "rootPartition(${rootPartition})" >> ${logFile} -echo "rootPartitionBytes(${rootPartitionBytes})" >> ${logFile} - -if [ ${#rootPartition} -gt 0 ]; then - echo "### CHECKING ROOT PARTITION SIZE ###" >> ${logFile} - sudo sed -i "s/^message=.*/message='Checking Disk size'/g" ${infoFile} - echo "Size in Bytes is: ${rootPartitionBytes} bytes on ($rootPartition)" >> ${logFile} - if [ $rootPartitionBytes -lt $minimumSizeByte ]; then - echo "Disk filesystem is smaller than ${minimumSizeByte} byte." >> ${logFile} - if [ ${fsexpanded} -eq 1 ]; then - echo "There was already an attempt to expand the fs, but still not bigger than 8GB." >> ${logFile} - echo "SD card seems to small - at least a 16GB disk is needed. Display on LCD to user." >> ${logFile} - sudo sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile} - sudo sed -i "s/^message=.*/message='Min 16GB SD card needed'/g" ${infoFile} - exit 1 - else - echo "Try to expand SD card FS, display info and reboot." >> ${logFile} - sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} - sudo sed -i "s/^message=.*/message='Expanding SD Card'/g" ${infoFile} - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" ${infoFile} - sleep 4 - if [ "${cpu}" == "x86_64" ]; then - echo "Please expand disk size." >> ${logFile} - # TODO: Expand disk size on x86_64 - elif [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then - resizeRaspbian="/usr/bin/raspi-config" - if [ -x ${resizeRaspbian} ]; then - echo "RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" >> ${logFile} - sudo $resizeRaspbian --expand-rootfs - echo "going into reboot" >> ${logFile} - sudo cp ${logFile} ${logFile}.fsexpand.recover - sudo shutdown -r now - exit 0 - else - echo "FAIL to execute: ${resizeRaspbian}" >> ${logFile} - fi - elif [ "${baseimage}" = "armbian" ]; then - resizeArmbian="/usr/lib/armbian/armbian-resize-filesystem" - if [ -x ${resizeArmbian} ]; then - echo "RUNNING EXPAND ARMBIAN: ${resizeArmbian}" >> ${logFile} - sudo $resizeArmbian start - echo "going into reboot" >> ${logFile} - sudo cp ${logFile} ${logFile}.fsexpand.recover - sudo shutdown -r now - sleep 100 - exit 0 - else - echo "FAIL to execute: ${resizeArmbian}" >> ${logFile} - fi - else - echo "WARN on provision - Not known system expand-rootfs OS: ${baseimage}" >> ${logFile} - fi - fi - else - echo "Size looks good. Bigger than ${minimumSizeByte} byte disk is used." >> ${logFile} - fi -else - echo "Disk of root partition ('$rootPartition') not detected, skipping the size check." >> ${logFile} -fi - # import config values sudo chmod 777 ${configFile} source ${configFile} From 21e6e0564dc511901cc318deb12e8bd5a0c3082c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 24 May 2021 14:15:53 -0500 Subject: [PATCH 234/293] fix default to setup --- home.admin/_bootstrap.sh | 2 +- home.admin/_provision_.sh | 4 +--- home.admin/setup.scripts/setupDialogControl.sh | 5 +++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index db3d530cf..8becf0e75 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -488,7 +488,7 @@ if [ ${isMounted} -eq 0 ]; then fi fi - echo "Calling _bootstrap.provision.sh for general system provisioning .." >> $logFile + echo "Calling _bootstrap.provision.sh for general system provisioning (${setupPhase}) .." >> $logFile sudo /home/admin/_provision_.sh if [ "$?" != "0" ]; then echo "EXIT BECAUSE OF ERROR STATE" >> $logFile diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index c620a0b4f..e0d47657e 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -35,7 +35,6 @@ if [ ${parameterExists} -eq 0 ]; then fi # import config values -sudo chmod 777 ${configFile} source ${configFile} ########################## @@ -124,11 +123,10 @@ fi #sudo ln -s /mnt/hdd/ssh /etc/ssh >> ${logFile} 2>&1 #sudo /home/admin/config.scripts/blitz.systemd.sh update-sshd >> ${logFile} 2>&1 -# optimze if RAM >1GB +# optimze mempool if RAM >1GB kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') if [ ${kbSizeRAM} -gt 1500000 ]; then echo "Detected RAM >1GB --> optimizing ${network}.conf" - sudo sed -i "s/^dbcache=.*/dbcache=1024/g" /mnt/hdd/${network}/${network}.conf sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /mnt/hdd/${network}/${network}.conf fi if [ ${kbSizeRAM} -gt 3500000 ]; then diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 794c86da7..fb1ca9fe4 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -31,6 +31,7 @@ if [ "${setupPhase}" == "update" ]; then else # default to normal setup options setupPhase="setup" + sudo sed -i "s/^setupPhase=.*/setupPhase='setup'/g" /home/admin/raspiblitz.info echo "# you refused recovery option - defaulting to normal setup" fi fi @@ -47,7 +48,7 @@ if [ "${setupPhase}" == "recovery" ]; then else # default to normal setup options setupPhase="setup" - sudo sed -i "s/^=setupPhase.*/state=setupPhase/g" /home/admin/raspiblitz.info + sudo sed -i "s/^setupPhase=.*/setupPhase='setup'/g" /home/admin/raspiblitz.info echo "# you refused recovery option - defaulting to normal setup" fi fi @@ -69,7 +70,7 @@ if [ "${setupPhase}" == "migration" ]; then else # on cancel - default to normal setup setupPhase="setup" - sudo sed -i "s/^=setupPhase.*/state=setupPhase/g" /home/admin/raspiblitz.info + sudo sed -i "s/^setupPhase=.*/setupPhase='setup'/g" /home/admin/raspiblitz.info echo "# you refused node migration option - defaulting to normal setup" exit 1 fi From 04ddcc742b486d6d45e730ab4b9c12a7268a2e24 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 11:34:34 -0500 Subject: [PATCH 235/293] change bitcoin service template --- home.admin/assets/bitcoind.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/assets/bitcoind.service b/home.admin/assets/bitcoind.service index 550d23ad6..8d8cea476 100644 --- a/home.admin/assets/bitcoind.service +++ b/home.admin/assets/bitcoind.service @@ -14,7 +14,7 @@ Group=bitcoin Type=forking PIDFile=/mnt/hdd/bitcoin/bitcoind.pid ExecStartPre=-/home/admin/config.scripts/blitz.systemd.sh log blockchain STARTED -ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/mnt/hdd/bitcoin/bitcoind.pid +ExecStart=/usr/local/bin/bitcoind -daemon -conf=/mnt/hdd/bitcoin/bitcoin.conf -pid=/mnt/hdd/bitcoin/bitcoind.pid KillMode=process Restart=always TimeoutSec=120 From 0b7720328d3cadcb28b90692d01df175dcd216ce Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 12:49:10 -0500 Subject: [PATCH 236/293] remove wants & after to not block provision --- home.admin/assets/bitcoind.service | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/assets/bitcoind.service b/home.admin/assets/bitcoind.service index 8d8cea476..8ea657110 100644 --- a/home.admin/assets/bitcoind.service +++ b/home.admin/assets/bitcoind.service @@ -1,11 +1,10 @@ # RaspiBlitz: systemd unit for bitcoind +# wants & after will be set after intial setup [Unit] Description=Bitcoin daemon -Wants=bootstrap.service -After=bootstrap.service -# for use with sendmail alert (coming soon) +# for use with sendmail alert #OnFailure=systemd-sendmail@%n [Service] From d96f507c429a9403e4d77d581b96335472943748 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 12:51:46 -0500 Subject: [PATCH 237/293] systemd dependencies --- home.admin/assets/bitcoind.service | 2 +- home.admin/assets/litecoind.service | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/home.admin/assets/bitcoind.service b/home.admin/assets/bitcoind.service index 8ea657110..efd0501a8 100644 --- a/home.admin/assets/bitcoind.service +++ b/home.admin/assets/bitcoind.service @@ -2,7 +2,7 @@ # wants & after will be set after intial setup [Unit] -Description=Bitcoin daemon +Description=Bitcoin-Daemon # for use with sendmail alert #OnFailure=systemd-sendmail@%n diff --git a/home.admin/assets/litecoind.service b/home.admin/assets/litecoind.service index 5584fbe66..c7c2cd422 100644 --- a/home.admin/assets/litecoind.service +++ b/home.admin/assets/litecoind.service @@ -1,7 +1,8 @@ +# RaspiBlitz: systemd unit for bitcoind +# wants & after will be set after intial setup + [Unit] -Description=Litecoin daemon -Wants=bootstrap.service -After=bootstrap.service +Description=Litecoin-Daemon # for use with sendmail alert (coming soon) #OnFailure=systemd-sendmail@%n From f1ad93e6c27116d9b3e7118eb20cf6535b0f2d29 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 12:59:28 -0500 Subject: [PATCH 238/293] add to todo --- home.admin/_bootstrap.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 8becf0e75..38403ab12 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -495,6 +495,10 @@ if [ ${isMounted} -eq 0 ]; then exit 1 fi + # TODO: + echo "TODO: add wants/after to systemd if blockchain service at the end" >> $logFile + exit 1 + ################################################### # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR # successfull update & recover can skip this From 6f2d9a5b0b5200927392b3f63c07049ff24a6fa3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 13:00:18 -0500 Subject: [PATCH 239/293] replace TODO --- home.admin/_bootstrap.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 38403ab12..27737811e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -495,10 +495,6 @@ if [ ${isMounted} -eq 0 ]; then exit 1 fi - # TODO: - echo "TODO: add wants/after to systemd if blockchain service at the end" >> $logFile - exit 1 - ################################################### # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR # successfull update & recover can skip this @@ -527,6 +523,10 @@ if [ ${isMounted} -eq 0 ]; then done + # TODO: + echo "TODO: add wants/after to systemd if blockchain service at the end" >> $logFile + exit 1 + exit 0 echo "rebooting" >> $logFile From f65eb7d03584cf841600e3f6b9b2575814da27a2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 13:28:27 -0500 Subject: [PATCH 240/293] more detais on startup --- home.admin/_provision.setup.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 583dc90e0..63d5301db 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -39,6 +39,7 @@ sudo /home/admin/config.scripts/blitz.setpassword.sh a "${passwordA}" >> ${logFi # Preserve SSH keys # just copy dont link anymore # see: https://github.com/rootzoll/raspiblitz/issues/1798 +sudo sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile} # link ssh directory from SD card to HDD echo "# --> SSH key settings" >> ${logFile} @@ -48,6 +49,7 @@ echo "# OK" >> ${logFile} ################################### # Prepare Blockchain Service +sudo sed -i "s/^message=.*/message='Blockchain Setup'/g" ${infoFile} if [ "${network}" == "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -108,6 +110,7 @@ fi # start network service echo "" echo "*** Start ${network} ***" >> ${logFile} +sudo sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile} echo "- This can take a while .." >> ${logFile} sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service #sudo chmod +x /etc/systemd/system/${network}d.service @@ -142,6 +145,7 @@ if [ "${lightning}" == "lnd" ]; then ################################### # LND + sudo sed -i "s/^message=.*/message='LND Setup'/g" ${infoFile} if [ "${passwordC}" == "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -184,6 +188,7 @@ if [ "${lightning}" == "lnd" ]; then # Init LND service & start echo "*** Init LND Service & Start ***" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Testrun'/g" ${infoFile} # just in case sudo systemctl stop lnd 2>/dev/null @@ -250,6 +255,7 @@ if [ "${lightning}" == "lnd" ]; then # WALLET --> SEED + SCB if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; the + sudo sed -i "s/^message=.*/message='LND Wallet (SEED & SCB)'/g" ${infoFile} sudo /home/admin/config.scripts/lnd.initwallet.py scb ${passwordC} "${seedWords}" "${staticchannelbackup}" ${seedPassword} if [ "${err}" != "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -264,6 +270,7 @@ if [ "${lightning}" == "lnd" ]; then # WALLET --> SEED elif [ "${seedWords}" != "" ] + sudo sed -i "s/^message=.*/message='LND Wallet (SEED)'/g" ${infoFile} sudo /home/admin/config.scripts/lnd.initwallet.py seed ${passwordC} "${seedWords}" ${seedPassword} if [ "${err}" != "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -278,6 +285,7 @@ if [ "${lightning}" == "lnd" ]; then # WALLET --> NEW else + sudo sed -i "s/^message=.*/message='LND Wallet (NEW)'/g" ${infoFile} source <(sudo /home/admin/config.scripts/lnd.initwallet.py new ${passwordC}) if [ "${err}" != "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -297,6 +305,7 @@ if [ "${lightning}" == "lnd" ]; then # sync macaroons & TLS to other users echo "*** Copy LND Macaroons to user admin ***" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Credentials'/g" ${infoFile} # make sure wallet is unlocked sleep 3 @@ -343,6 +352,7 @@ if [ "${lightning}" == "cln" ]; then ################################### # c-lightning + sudo sed -i "s/^message=.*/message='c-lightning Setup'/g" ${infoFile} sed -i "s/^state=.*/state=error/g" ${infoFile} sed -i "s/^message=.*/message='TODO: install c-lightning'/g" ${infoFile} @@ -351,6 +361,7 @@ if [ "${lightning}" == "cln" ]; then exit 1 fi +sudo sed -i "s/^message=.*/message='Provision Setup Finish'/g" ${infoFile} echo "END Setup" >> ${logFile} exit 0 From 92113807018a77e0cbe236c00b09819018d467eb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 13:30:50 -0500 Subject: [PATCH 241/293] error UI --- home.admin/assets/bitcoind.service | 4 +++- home.admin/assets/litecoind.service | 4 +++- home.admin/setup.scripts/eventInfoWait.sh | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/home.admin/assets/bitcoind.service b/home.admin/assets/bitcoind.service index efd0501a8..75d5399c3 100644 --- a/home.admin/assets/bitcoind.service +++ b/home.admin/assets/bitcoind.service @@ -1,5 +1,7 @@ # RaspiBlitz: systemd unit for bitcoind -# wants & after will be set after intial setup +# edit final Wants/After when provision is done +Wants=network.target +After=network.target [Unit] Description=Bitcoin-Daemon diff --git a/home.admin/assets/litecoind.service b/home.admin/assets/litecoind.service index c7c2cd422..cade5f153 100644 --- a/home.admin/assets/litecoind.service +++ b/home.admin/assets/litecoind.service @@ -1,5 +1,7 @@ # RaspiBlitz: systemd unit for bitcoind -# wants & after will be set after intial setup +# edit final Wants/After when provision is done +Wants=network.target +After=network.target [Unit] Description=Litecoin-Daemon diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index ae56cc026..bc5b54fd3 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -59,7 +59,7 @@ ${contentString} ------------------------------------ Use terminal command to login: ssh admin@${localip} -" 9 41 +" 10 41 elif [ "${eventID}" == "error" ] && [ "${mode}" == "ssh" ]; then @@ -70,7 +70,7 @@ ${contentString} Please report to the Raspiblitz GitHub Use CTRL+C to exit to terminal. For shutdown use command: off -" 9 50 +" 10 50 elif [ "${eventID}" == "provision" ] || [ "${eventID}" == "recovering" ]; then From e71e4796b28a619815b4980725a86a9f97c5da12 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 13:55:58 -0500 Subject: [PATCH 242/293] detect inconsistant sd card image --- home.admin/_bootstrap.sh | 15 +++++++++++++++ home.admin/setup.scripts/eventInfoWait.sh | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 27737811e..d24ed7eac 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -87,6 +87,18 @@ if [ "${setupStep}" != "100" ]; then fi sudo chmod 777 ${infoFile} +###################################### +# CHECK SD CARD INCONSISTENT STATE + +# when the provision did not ran thru without error (ask user for fresh sd card) +provisionFlagExists=$(sudo ls /home/admin/provision.flag | grep -c 'provision.flag') +if [ "${provisionFlagExists}" == "1" ]; then + sed -i "s/^state=.*/state=inconsistentsystem/g" ${infoFile} + sed -i "s/^message=.*/message='provision did not ran thru'/g" ${infoFile} + echo "FAIL: 'provision did not ran thru - need fresh sd card!" >> ${logFile} + exit 1 +fi + ###################################### # SECTION FOR POSSIBLE REBOOT ACTIONS systemInitReboot=0 @@ -439,6 +451,9 @@ if [ ${isMounted} -eq 0 ]; then source ${infoFile} echo "# PROVISION PROCESS with setupPhase(${setupPhase})" + # mark system on sd card as in setup process + echo "the provision process was started but did not finish yet" > /home/admin/provision.flag + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile if [ "${hddFormat}" != "btrfs" ]; then diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index bc5b54fd3..4cdd2d133 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -88,6 +88,15 @@ ssh admin@${localip} Use your Password A " 7 41 +elif [ "${eventID}" == "inconsistentsystem" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +PLEASE START WITH A FRESH SD CARD IMAGE +--------------------------------------- +Cut power & remove sd card and then +flash a fresh RaspiBlitz image on it. +" 8 45 + elif [ "${eventID}" == "waitsetup" ] && [ "${mode}" == "lcd" ]; then if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then From d7d28c81c4c7fe5d923ce9c496b64c05178a2f66 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:06:22 -0500 Subject: [PATCH 243/293] delete provion in progress flag at the end --- home.admin/_bootstrap.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d24ed7eac..360cd0f8d 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -538,6 +538,12 @@ if [ ${isMounted} -eq 0 ]; then done + ######################################## + # AFTER FINAL SETUP TASKS + + # delete provision in progress flag + sudo rm /home/admin/provision.flag + # TODO: echo "TODO: add wants/after to systemd if blockchain service at the end" >> $logFile exit 1 From 5c476fdb96af430082070c6bea762da4d8167622 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:12:26 -0500 Subject: [PATCH 244/293] check bitcoin running --- home.admin/_provision.setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 63d5301db..1b09f6401 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -124,7 +124,7 @@ loopcount=0 while [ ${bitcoinRunning} -eq 0 ] do >&2 echo "# (${loopcount}/200) checking if ${network}d is running ... " >> ${logFile} - bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) + bitcoinRunning=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) sleep 2 sync loopcount=$(($loopcount +1)) From d921410b6b23494484bc0ebff1cde8b1ddc21e46 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:30:29 -0500 Subject: [PATCH 245/293] simply debug info --- home.admin/_provision.setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 1b09f6401..ae5e355dc 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -131,11 +131,11 @@ do if [ ${loopcount} -gt 200 ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} sed -i "s/^message=.*/message='setup: failed ${network}'/g" ${infoFile} - echo "FAIL see ${logFile}" echo "FAIL: setup: failed ${network}" >> ${logFile} exit 1 fi done +echo "OK ${network} startup successfull " >> ${logFile} ################################### From ef1576c17d55f1177e56e0ba44d28e685f0366b2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:46:20 -0500 Subject: [PATCH 246/293] fix syntax --- home.admin/_bootstrap.sh | 4 ++-- home.admin/_provision.setup.sh | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 360cd0f8d..ab6b39bfc 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -478,7 +478,7 @@ if [ ${isMounted} -eq 0 ]; then echo "Calling _bootstrap.setup.sh for basic setup tasks .." >> $logFile sudo /home/admin/_provision.setup.sh if [ "$?" != "0" ]; then - echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + echo "EXIT BECAUSE OF ERROR STATE ($?)" >> $logFile exit 1 fi fi @@ -488,7 +488,7 @@ if [ ${isMounted} -eq 0 ]; then echo "Calling _bootstrap.update.sh for possible update migrations .." >> $logFile sudo /home/admin/_provision.update.sh if [ "$?" != "0" ]; then - echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + echo "EXIT BECAUSE OF ERROR STATE ($?)" >> $logFile exit 1 fi fi diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index ae5e355dc..c7b422d67 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -140,6 +140,7 @@ echo "OK ${network} startup successfull " >> ${logFile} ################################### # Prepare Lightning +echo "Prepare Lightning (${lightning})" >> ${logFile} if [ "${lightning}" == "lnd" ]; then @@ -253,7 +254,7 @@ if [ "${lightning}" == "lnd" ]; then fi # WALLET --> SEED + SCB - if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; the + if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; then sudo sed -i "s/^message=.*/message='LND Wallet (SEED & SCB)'/g" ${infoFile} sudo /home/admin/config.scripts/lnd.initwallet.py scb ${passwordC} "${seedWords}" "${staticchannelbackup}" ${seedPassword} @@ -268,7 +269,7 @@ if [ "${lightning}" == "lnd" ]; then fi # WALLET --> SEED - elif [ "${seedWords}" != "" ] + elif [ "${seedWords}" != "" ]; then sudo sed -i "s/^message=.*/message='LND Wallet (SEED)'/g" ${infoFile} sudo /home/admin/config.scripts/lnd.initwallet.py seed ${passwordC} "${seedWords}" ${seedPassword} @@ -340,7 +341,6 @@ if [ "${lightning}" == "lnd" ]; then if [ "${err}" != "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile} - echo "FAIL see ${logFile}" echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile} echo "${err}" >> ${logFile} exit 1 From d019ebe557d2f8dbfc1754d262085a6c9d0ad60b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:47:55 -0500 Subject: [PATCH 247/293] more debug info --- home.admin/_bootstrap.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index ab6b39bfc..d9345a54d 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -479,6 +479,7 @@ if [ ${isMounted} -eq 0 ]; then sudo /home/admin/_provision.setup.sh if [ "$?" != "0" ]; then echo "EXIT BECAUSE OF ERROR STATE ($?)" >> $logFile + echo "This can also happen if _provision.setup.sh has syntax errros" >> $logFile exit 1 fi fi @@ -489,6 +490,7 @@ if [ ${isMounted} -eq 0 ]; then sudo /home/admin/_provision.update.sh if [ "$?" != "0" ]; then echo "EXIT BECAUSE OF ERROR STATE ($?)" >> $logFile + echo "This can also happen if _provision.update.sh has syntax errros" >> $logFile exit 1 fi fi @@ -498,7 +500,8 @@ if [ ${isMounted} -eq 0 ]; then echo "Calling _bootstrap.migration.sh for possible update migrations .." >> $logFile sudo /home/admin/_provision.migration.sh if [ "$?" != "0" ]; then - echo "EXIT BECAUSE OF ERROR STATE" >> $logFile + echo "EXIT BECAUSE OF ERROR STATE ($?)" >> $logFile + echo "This can also happen if _provision.migration.sh has syntax errros" >> $logFile exit 1 fi fi From 0fd496ee1c683181efeebe08e3a71b5532572f13 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 14:50:52 -0500 Subject: [PATCH 248/293] pipe outputs to log --- home.admin/_provision.setup.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index c7b422d67..0595374b5 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -310,7 +310,7 @@ if [ "${lightning}" == "lnd" ]; then # make sure wallet is unlocked sleep 3 - /home/admin/config.scripts/lnd.unlock.sh "${passwordC}" + /home/admin/config.scripts/lnd.unlock.sh "${passwordC}" >> ${logFile} sleep 3 # check if macaroon exists now - if not fail @@ -318,22 +318,21 @@ if [ "${lightning}" == "lnd" ]; then if [ ${macaroonExists} -eq 0 ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} sed -i "s/^message=.*/message='setup: lnd no macaroons'/g" ${infoFile} - echo "FAIL see ${logFile}" echo "FAIL: setup: lnd no macaroons" >> ${logFile} exit 1 fi # now sync macaroons & TLS zo other users - sudo /home/admin/config.scripts/lnd.credentials.sh sync + sudo /home/admin/config.scripts/lnd.credentials.sh sync >> ${logFile} # unlock Wallet (if needed) - echo "*** Check Wallet Lock ***" + echo "*** Check Wallet Lock ***" >> ${logFile} locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) if [ ${locked} -gt 0 ]; then - echo "OK - Wallet is locked ... starting unlocking dialog" - /home/admin/config.scripts/lnd.unlock.sh + echo "OK - Wallet is locked ... starting unlocking dialog" >> ${logFile} + /home/admin/config.scripts/lnd.unlock.sh >> ${logFile} else - echo "OK - Wallet is already unlocked" + echo "OK - Wallet is already unlocked" >> ${logFile} fi # make a final lnd check From 53047d03fdf3158f82652537a1faad9309888220 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 16:08:48 -0500 Subject: [PATCH 249/293] add string quotes --- home.admin/_provision.setup.sh | 4 ++-- home.admin/_provision_.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 0595374b5..caf9f550d 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -299,8 +299,8 @@ if [ "${lightning}" == "lnd" ]; then fi # write created seedwords into SETUPFILE to be displayed to user on final setup later - echo "seedwordsNEW=${seedwords}" >> ${setupFile} - echo "seedwords6x4NEW=${seedwords6x4}" >> ${setupFile} + echo "'seedwordsNEW='${seedwords}'" >> ${setupFile} + echo "seedwords6x4NEW='${seedwords6x4}'" >> ${setupFile} fi diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index e0d47657e..752a8b018 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -157,7 +157,7 @@ sudo ln -s -f /mnt/hdd/.tmux.conf.local /home/admin/.tmux.conf.local >> ${logFil # backup LND dir (especially for macaroons and tlscerts) # https://github.com/rootzoll/raspiblitz/issues/324 echo "*** Make backup of LND directory" >> ${logFile} -sudo rm -r /mnt/hdd/backup_lnd +sudo rm -r /mnt/hdd/backup_lnd 2>/dev/null sudo cp -r /mnt/hdd/lnd /mnt/hdd/backup_lnd >> ${logFile} 2>&1 numOfDiffers=$(sudo diff -arq /mnt/hdd/lnd /mnt/hdd/backup_lnd | grep -c "differ") if [ ${numOfDiffers} -gt 0 ]; then From acfc43546f9b1d46e403a969dc9dcc9f83f6d461 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 17:29:57 -0500 Subject: [PATCH 250/293] prepare final setup dialogs --- home.admin/00raspiblitz.sh | 10 ++ home.admin/_bootstrap.sh | 118 ++++++++++-------- .../setup.scripts/finalDialogControl.sh | 42 +++++++ 3 files changed, 121 insertions(+), 49 deletions(-) create mode 100755 home.admin/setup.scripts/finalDialogControl.sh diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index afbbc654f..c70fda636 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -75,6 +75,16 @@ do if [ "${exitMenuLoop}" != "0" ]; then break; fi fi + ##################################### + # SETUP DONE DIALOGS + ##################################### + + # when is needed & bootstrap process signals that it waits for user dialog + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then + # push to final setup gui dialogs + /home/admin/setup.scripts/finalDialogControl.sh + fi + ##################################### # MAIN MENU ##################################### diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d9345a54d..4f974f022 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -514,11 +514,22 @@ if [ ${isMounted} -eq 0 ]; then fi ################################################### - # WAIT LOOP: AFTER FRESH SETUP, MIFGRATION OR ERROR + # WAIT LOOP: AFTER FRESH SETUP, MIGRATION # successfull update & recover can skip this ################################################### - until [ "${state}" != "ready" ] + if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "migration" ]; then + echo "# Go into WAIT LOOP for final setup dialog ..." >> $logFile + sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} + sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} + else + echo "# Skip WAIT LOOP boot directly into main menu ..." >> $logFile + sed -i "s/^state=.*/state=finalready/g" ${infoFile} + sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} + fi + + source ${infoFile} + until [ "${state}" == "finalready" ] do # TODO: DETECT WHEN USER SETUP IS DONE @@ -544,30 +555,70 @@ if [ ${isMounted} -eq 0 ]; then ######################################## # AFTER FINAL SETUP TASKS + # make sure for future starts that blockchain service gets started after boostrap + sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service + sed -i "s/^After=.*/After=network.target/g" /etc/systemd/system/${network}d.service + # delete provision in progress flag sudo rm /home/admin/provision.flag - # TODO: - echo "TODO: add wants/after to systemd if blockchain service at the end" >> $logFile - exit 1 + # signal that setup phas is over + sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} - exit 0 - - echo "rebooting" >> $logFile - echo "state=recovered" >> /home/admin/recover.flag - echo "shutdown in 1min" >> $logFile + #echo "rebooting" >> $logFile + #echo "state=recovered" >> /home/admin/recover.flag + #echo "shutdown in 1min" >> $logFile # save log file for inspection before reboot - sudo cp ${logFile} ${logFile}.recover - sync - sudo shutdown -r -F -t 60 - exit 0 + #sudo cp ${logFile} ${logFile}.recover + #sync + #sudo shutdown -r -F -t 60 + #exit 0 + +else + + ############################ + ############################ + # NORMAL START BOOTSTRAP (not executed after setup) + # Blockchain & Lightning not running + ############################ + + ###################################################################### + # MAKE SURE LND RPC/REST ports are standard & open to all connections + ###################################################################### + sudo sed -i "s/^rpclisten=.*/rpclisten=0.0.0.0:10009/g" /mnt/hdd/lnd/lnd.conf + sudo sed -i "s/^restlisten=.*/restlisten=0.0.0.0:8080/g" /mnt/hdd/lnd/lnd.conf + + ################################# + # FIX BLOCKCHAINDATA OWNER (just in case) + # https://github.com/rootzoll/raspiblitz/issues/239#issuecomment-450887567 + ################################# + sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin 2>/dev/null + + ################################# + # FIX BLOCKING FILES (just in case) + # https://github.com/rootzoll/raspiblitz/issues/1901#issue-774279088 + # https://github.com/rootzoll/raspiblitz/issues/1836#issue-755342375 + sudo rm -f /mnt/hdd/bitcoin/bitcoind.pid 2>/dev/null + sudo rm -f /mnt/hdd/bitcoin/.lock 2>/dev/null + + ################################ + # DELETE LOG & LOCK FILES + ################################ + # LND and Blockchain Errors will be still in systemd journals + + # /mnt/hdd/bitcoin/debug.log + sudo rm /mnt/hdd/${network}/debug.log 2>/dev/null + # /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log + sudo rm /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null + # https://github.com/rootzoll/raspiblitz/issues/1700 + sudo rm /mnt/storage/app-storage/electrs/db/mainnet/LOCK 2>/dev/null fi -############################ -############################ -# NORMAL START BOOTSTRAP -############################ +############################## +############################## +# BOOSTRAP IN EVERY SITUATION +############################## sed -i "s/^setupPhase=.*/setupPhase='starting'/g" ${infoFile} @@ -599,25 +650,6 @@ source ${configFile} # update public IP on boot - set to domain if available /home/admin/config.scripts/internet.sh update-publicip ${lndAddress} -###################################################################### -# MAKE SURE LND RPC/REST ports are standard & open to all connections -###################################################################### -sudo sed -i "s/^rpclisten=.*/rpclisten=0.0.0.0:10009/g" /mnt/hdd/lnd/lnd.conf -sudo sed -i "s/^restlisten=.*/restlisten=0.0.0.0:8080/g" /mnt/hdd/lnd/lnd.conf - -################################# -# FIX BLOCKCHAINDATA OWNER (just in case) -# https://github.com/rootzoll/raspiblitz/issues/239#issuecomment-450887567 -################################# -sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin 2>/dev/null - -################################# -# FIX BLOCKING FILES (just in case) -# https://github.com/rootzoll/raspiblitz/issues/1901#issue-774279088 -# https://github.com/rootzoll/raspiblitz/issues/1836#issue-755342375 -sudo rm -f /mnt/hdd/bitcoin/bitcoind.pid 2>/dev/null -sudo rm -f /mnt/hdd/bitcoin/.lock 2>/dev/null - ################################# # MAKE SURE USERS HAVE LATEST LND CREDENTIALS ################################# @@ -653,18 +685,6 @@ fi sed -i "s/^state=.*/state=ready/g" ${infoFile} sed -i "s/^message=.*/message='waiting login'/g" ${infoFile} -################################ -# DELETE LOG & LOCK FILES -################################ -# LND and Blockchain Errors will be still in systemd journals - -# /mnt/hdd/bitcoin/debug.log -sudo rm /mnt/hdd/${network}/debug.log 2>/dev/null -# /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log -sudo rm /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null -# https://github.com/rootzoll/raspiblitz/issues/1700 -sudo rm /mnt/storage/app-storage/electrs/db/mainnet/LOCK 2>/dev/null - ##################################### # CLEAN HDD TEMP ##################################### diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh new file mode 100755 index 000000000..dce1bd9eb --- /dev/null +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" +source ${SETUPFILE} + +############################################ +# SHOW SEED WORDS AFTER SETUP +if [ "${setupPhase}" == "setup" ]; then + + echo "Write down your seedwords: ${seedwords6x4NEW}" + echo "PRESS ENTER" + readkey + +fi + +############################################ +# SETUP DONE CONFIRMATION (Konfetti Moment) + +# when coming from fresh setup +if [ "${setupPhase}" == "setup" ]; + + echo "Hooray :) Everything is Setup!" + echo "PRESS ENTER" + readkey + +elif [ "${setupPhase}" == "migration" ]; then + + echo "Hooray :) Your Migration to RaspiBlitz is Done!" + echo "PRESS ENTER" + readkey + +else + echo "Missing Final Done Dialog for: ${setupPhase}" + echo "PRESS ENTER" + readkey +fi \ No newline at end of file From b4c9b743ed9b6a22bcf6f864ee46199503274533 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:00:52 -0500 Subject: [PATCH 251/293] change state after final --- home.admin/00raspiblitz.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index c70fda636..4383a00e9 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -83,6 +83,7 @@ do if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then # push to final setup gui dialogs /home/admin/setup.scripts/finalDialogControl.sh + state="starting" fi ##################################### From 93310f00974359ea4508c3aaa3dd1918d31d499e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:02:55 -0500 Subject: [PATCH 252/293] add debug --- home.admin/00raspiblitz.sh | 2 ++ home.admin/setup.scripts/finalDialogControl.sh | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4383a00e9..fbf5b566b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -81,6 +81,8 @@ do # when is needed & bootstrap process signals that it waits for user dialog if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then + echo "TESTER" + sleep 3 # push to final setup gui dialogs /home/admin/setup.scripts/finalDialogControl.sh state="starting" diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index dce1bd9eb..376cb03e7 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -9,6 +9,11 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source ${SETUPFILE} + +clear +echo "TEST" +sleep 3 + ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${setupPhase}" == "setup" ]; then From 8bddde6ed02b379886394698e20b0e99c3785b5b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:04:01 -0500 Subject: [PATCH 253/293] fix readkey --- home.admin/setup.scripts/finalDialogControl.sh | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 376cb03e7..ef2687b05 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -9,18 +9,13 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source ${SETUPFILE} - -clear -echo "TEST" -sleep 3 - ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${setupPhase}" == "setup" ]; then echo "Write down your seedwords: ${seedwords6x4NEW}" echo "PRESS ENTER" - readkey + read key fi @@ -32,16 +27,16 @@ if [ "${setupPhase}" == "setup" ]; echo "Hooray :) Everything is Setup!" echo "PRESS ENTER" - readkey + read key elif [ "${setupPhase}" == "migration" ]; then echo "Hooray :) Your Migration to RaspiBlitz is Done!" echo "PRESS ENTER" - readkey + read key else echo "Missing Final Done Dialog for: ${setupPhase}" echo "PRESS ENTER" - readkey + read key fi \ No newline at end of file From e455d4a73049f1234889ac355d4123909d85cefe Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:08:45 -0500 Subject: [PATCH 254/293] fix text --- home.admin/00raspiblitz.sh | 2 -- home.admin/_provision.setup.sh | 2 +- home.admin/setup.scripts/finalDialogControl.sh | 13 ++++++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index fbf5b566b..4383a00e9 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -81,8 +81,6 @@ do # when is needed & bootstrap process signals that it waits for user dialog if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then - echo "TESTER" - sleep 3 # push to final setup gui dialogs /home/admin/setup.scripts/finalDialogControl.sh state="starting" diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index caf9f550d..3e490de30 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -299,7 +299,7 @@ if [ "${lightning}" == "lnd" ]; then fi # write created seedwords into SETUPFILE to be displayed to user on final setup later - echo "'seedwordsNEW='${seedwords}'" >> ${setupFile} + echo "seedwordsNEW='${seedwords}'" >> ${setupFile} echo "seedwords6x4NEW='${seedwords6x4}'" >> ${setupFile} fi diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index ef2687b05..fb8a392a6 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -12,11 +12,11 @@ source ${SETUPFILE} ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${setupPhase}" == "setup" ]; then - - echo "Write down your seedwords: ${seedwords6x4NEW}" + clear + echo "Write down your seedwords:" + echo "${seedwords6x4NEW}" echo "PRESS ENTER" read key - fi ############################################ @@ -24,18 +24,21 @@ fi # when coming from fresh setup if [ "${setupPhase}" == "setup" ]; - + clear echo "Hooray :) Everything is Setup!" echo "PRESS ENTER" read key +# when coming from migration from other node elif [ "${setupPhase}" == "migration" ]; then - + clear echo "Hooray :) Your Migration to RaspiBlitz is Done!" echo "PRESS ENTER" read key +# just in case then from another phase else + clear echo "Missing Final Done Dialog for: ${setupPhase}" echo "PRESS ENTER" read key From f8ccdd31ab2184a1377e8e0c137c36e8257349da Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:10:22 -0500 Subject: [PATCH 255/293] debug --- home.admin/setup.scripts/finalDialogControl.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index fb8a392a6..a69ac9496 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -27,19 +27,21 @@ if [ "${setupPhase}" == "setup" ]; clear echo "Hooray :) Everything is Setup!" echo "PRESS ENTER" - read key + read key2 # when coming from migration from other node elif [ "${setupPhase}" == "migration" ]; then clear echo "Hooray :) Your Migration to RaspiBlitz is Done!" echo "PRESS ENTER" - read key + read key2 # just in case then from another phase else clear echo "Missing Final Done Dialog for: ${setupPhase}" echo "PRESS ENTER" - read key -fi \ No newline at end of file + read key2 +fi + +sleep 2 \ No newline at end of file From 7e3f786bcc1d0dbc4550db718bf5bd38d0eb4950 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:11:58 -0500 Subject: [PATCH 256/293] add seed word confirmation --- home.admin/setup.scripts/finalDialogControl.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index a69ac9496..ab1761d64 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -12,11 +12,15 @@ source ${SETUPFILE} ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${setupPhase}" == "setup" ]; then - clear - echo "Write down your seedwords:" - echo "${seedwords6x4NEW}" - echo "PRESS ENTER" - read key + ack=0 + while [ ${ack} -eq 0 ] + do + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76 + whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 + if [ $? -eq 1 ]; then + ack=1 + fi + done fi ############################################ From 3a99b1929c8f2484d626af314212867a47ced470 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:13:20 -0500 Subject: [PATCH 257/293] use corect var --- home.admin/setup.scripts/finalDialogControl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index ab1761d64..6c2e8dc0d 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -15,7 +15,7 @@ if [ "${setupPhase}" == "setup" ]; then ack=0 while [ ${ack} -eq 0 ] do - whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76 + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4NEW}" 12 76 whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 if [ $? -eq 1 ]; then ack=1 From b662ec3afedf8540140924ea1cd360fac1920a52 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:15:00 -0500 Subject: [PATCH 258/293] debug --- home.admin/setup.scripts/finalDialogControl.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 6c2e8dc0d..57cad03a2 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -23,6 +23,9 @@ if [ "${setupPhase}" == "setup" ]; then done fi +echo "test(${setupPhase})" +sleep 2 + ############################################ # SETUP DONE CONFIRMATION (Konfetti Moment) @@ -31,21 +34,22 @@ if [ "${setupPhase}" == "setup" ]; clear echo "Hooray :) Everything is Setup!" echo "PRESS ENTER" - read key2 + read key # when coming from migration from other node elif [ "${setupPhase}" == "migration" ]; then clear echo "Hooray :) Your Migration to RaspiBlitz is Done!" echo "PRESS ENTER" - read key2 + read key # just in case then from another phase else clear echo "Missing Final Done Dialog for: ${setupPhase}" echo "PRESS ENTER" - read key2 + read key fi +echo "test" sleep 2 \ No newline at end of file From 0a3ac5ac5c8a91ccac794ee409ecd22dc17c92af Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:15:45 -0500 Subject: [PATCH 259/293] fix syntax --- home.admin/setup.scripts/finalDialogControl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 57cad03a2..2f1ca8df7 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -30,7 +30,7 @@ sleep 2 # SETUP DONE CONFIRMATION (Konfetti Moment) # when coming from fresh setup -if [ "${setupPhase}" == "setup" ]; +if [ "${setupPhase}" == "setup" ]; then clear echo "Hooray :) Everything is Setup!" echo "PRESS ENTER" From ac890e22a054eee9de6448308a0597872b2398d5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:21:26 -0500 Subject: [PATCH 260/293] patch --- home.admin/setup.scripts/finalDialogControl.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 2f1ca8df7..9336ab679 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -23,9 +23,6 @@ if [ "${setupPhase}" == "setup" ]; then done fi -echo "test(${setupPhase})" -sleep 2 - ############################################ # SETUP DONE CONFIRMATION (Konfetti Moment) @@ -51,5 +48,5 @@ else read key fi -echo "test" -sleep 2 \ No newline at end of file +# signal to backend that all is good and it can continue +sudo sed -i "s/^state=.*/state='starting'/g" /home/admin/raspiblitz.info \ No newline at end of file From b4e636b7bb28b2a5f34a49eb2a688a0c2ddec55b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:23:11 -0500 Subject: [PATCH 261/293] correct signal --- home.admin/setup.scripts/finalDialogControl.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 9336ab679..43bd980ea 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -49,4 +49,4 @@ else fi # signal to backend that all is good and it can continue -sudo sed -i "s/^state=.*/state='starting'/g" /home/admin/raspiblitz.info \ No newline at end of file +sudo sed -i "s/^state=.*/state='finalready'/g" /home/admin/raspiblitz.info \ No newline at end of file From 8a70a18bf3b00a741c775ef4907e8de49436c061 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:27:15 -0500 Subject: [PATCH 262/293] fix display --- home.admin/00infoLCD.sh | 2 +- home.admin/_bootstrap.sh | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index cfd7dfbc7..f36643533 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -87,7 +87,7 @@ while : # get config info if already available (with state value) source ${infoFile} - if [ "${setupPhase}" != "ready" ]; then + if [ "${setupPhase}" != "done" ]; then # show status info during boot & setup & repair on LCD /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" lcd diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 4f974f022..037ce96bd 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -562,18 +562,12 @@ if [ ${isMounted} -eq 0 ]; then # delete provision in progress flag sudo rm /home/admin/provision.flag + # delete setup data from RAM + sudo rm ${setupFile} + # signal that setup phas is over sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} - #echo "rebooting" >> $logFile - #echo "state=recovered" >> /home/admin/recover.flag - #echo "shutdown in 1min" >> $logFile - # save log file for inspection before reboot - #sudo cp ${logFile} ${logFile}.recover - #sync - #sudo shutdown -r -F -t 60 - #exit 0 - else ############################ From 41ef1f21a3dd3b243e30a9bf885c288a403276e3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:28:37 -0500 Subject: [PATCH 263/293] clean state --- home.admin/_bootstrap.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 037ce96bd..4a559238c 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -671,14 +671,6 @@ else echo "No additional backup device was configured." >> $logFile fi -################################ -# SD INFOFILE BASICS -################################ - -# state info -sed -i "s/^state=.*/state=ready/g" ${infoFile} -sed -i "s/^message=.*/message='waiting login'/g" ${infoFile} - ##################################### # CLEAN HDD TEMP ##################################### @@ -722,6 +714,7 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} sudo systemctl enable ${network}d sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} +sed -i "s/^state=.*/state=ready/g" ${infoFile} echo "DONE BOOTSTRAP" >> $logFile exit 0 From 220f760c7a17e3d60f597c3a1db621fe19484aa1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 18:44:35 -0500 Subject: [PATCH 264/293] put wallet unlock upfront --- home.admin/00raspiblitz.sh | 22 +++++++++++----------- home.admin/80scanLND.sh | 2 -- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4383a00e9..551c3fcc4 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -61,6 +61,17 @@ do sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status source /var/cache/raspiblitz/raspiblitz.status + ##################################### + # ALWAYS: Handle System States + ##################################### + + ############################ + # LND Wallet Unlock + + if [ "${walletLocked}" == "1" ]; then + /home/admin/config.scripts/lnd.unlock.sh + fi + ##################################### # SETUP MENU ##################################### @@ -146,17 +157,6 @@ do fi - ##################################### - # ALWAYS: Handle System States - ##################################### - - ############################ - # LND Wallet Unlock - - if [ "${walletLocked}" == "1" ]; then - /home/admin/config.scripts/lnd.unlock.sh - fi - ##################################### # AFTER SETUP: Handle System States ##################################### diff --git a/home.admin/80scanLND.sh b/home.admin/80scanLND.sh index 3cb945f00..38a8065c9 100755 --- a/home.admin/80scanLND.sh +++ b/home.admin/80scanLND.sh @@ -1,7 +1,5 @@ #!/bin/bash -# TODO: CHECK IF IS NOW REPLACED BY NEW EVENT WAIT DIALOGS - source /home/admin/_version.info source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf From 23f850e0bf6faedd22d371c5066e05ea70b3b15e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 19:22:09 -0500 Subject: [PATCH 265/293] add peers to status scan --- home.admin/config.scripts/blitz.statusscan.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index 2d20cc2d1..4e3bc8c5f 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -57,6 +57,13 @@ if [ ${bitcoinRunning} -eq 1 ]; then echo "bitcoinErrorFull='${bitcoinErrorFull}'" else + ################################### + # Get data from blockchain network + ################################### + + source <(sudo -u bitcoin /home/admin/config.scripts/network.monitor.sh peer-status) + echo "blockchainPeers=${peers}" + ############################## # Get data from blockchaininfo ############################## From 118b7c087203e2d20214c6a468c6153ff7da7750 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 19:30:29 -0500 Subject: [PATCH 266/293] synccreen --- home.admin/00raspiblitz.sh | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 551c3fcc4..33f893c44 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -98,17 +98,31 @@ do fi ##################################### - # MAIN MENU + # MAIN MENU or BLOCKCHAIN SYNC ##################################### # when setup is done & state is ready .. jump to main menu if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then - # push user to main menu - /home/admin/00mainMenu.sh - # use the exit code from main menu as signal if menu loop should exited - # 0 = continue loop / everything else = break loop and exit to terminal - exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ]; then break; fi + + # TODO: move data gathering into background and get thru raspiblitz.info/redis + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + if [ "${initialSync}" == "1" ] && [ "${syncedToChain}" == "0" ]; then + + # BLOCKCHAIN SYNC SCREEN + echo "Sync: ${syncProgress}" + sleep 4 + + else + + # MAIN MENU + /home/admin/00mainMenu.sh + # use the exit code from main menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + + fi + fi ##################################### From 62b748bb8f2f9d9bbd7f74e9fc403934a2209ca5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:19:22 -0500 Subject: [PATCH 267/293] blockchain screen --- home.admin/00raspiblitz.sh | 17 +++- .../setup.scripts/eventBlockchainSync.sh | 83 +++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 home.admin/setup.scripts/eventBlockchainSync.sh diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 33f893c44..4c854e071 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -5,7 +5,7 @@ # gets called when user logins per SSH # or calls 'raspiblitz' on the terminal ####################################### -echo "Starting SSH user interface ..." +echo "Starting SSH user interface ... (please wait)" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" @@ -47,6 +47,7 @@ sudo chmod 740 /var/cache/raspiblitz/raspiblitz.status ##################################### exitMenuLoop=0 +doneIBD=0 while [ ${exitMenuLoop} -eq 0 ] do @@ -97,6 +98,20 @@ do state="starting" fi + ##################################### + # INITIAL BLOCKCHAIN SYNC + ##################################### + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ ${doneIBD} -eq 0 ]; then + # check if initial Blockchain sync is in progress + echo "Gathering Info ... (please wait)" + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + if [ "${syncedToChain}" == "0" ]; then + + fi + doneIBD=1 + fi + + ##################################### # MAIN MENU or BLOCKCHAIN SYNC ##################################### diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh new file mode 100644 index 000000000..222028dee --- /dev/null +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# this is an dialog that handles all UI events during setup that require a "info & wait" with no interaction + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/_version.info +source /home/admin/raspiblitz.info + +# 1st PARAMETER: ssh|lcd +lcd=0 +if [ "$1" == "lcd" ]; then + lcd=1 +fi + +# 2nd PARAMETER (optional): -loop-until-synced +loopUntilSynced=0 +if [ "$2" == "-loop-until-synced" ]; then + loopUntilSynced=1 +fi + +loop=1 +while [ ${loop} -eq 1 ] +do + + # get fresh data + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + + # display blockchain sync + height=6 + width=45 + actionString="Please wait - this can take some time" + + # formatting BLOCKCHAIN SYNC PROGRESS + if [ "${syncProgress}" == "" ]; then + if [ ${startcountBlockchain} -lt 2 ]; then + syncProgress="waiting" + else + syncProgress="${startcountBlockchain} restarts" + fi + elif [ ${#syncProgress} -lt 6 ]; then + syncProgress=" ${syncProgress} % ${peers} peers" + else + syncProgress="${syncProgress} % ${peers} peers" + fi + + # formatting LIGHTNING SCAN PROGRESS + if [ "${scanProgress}" == "" ]; then + # in case of LND RPC is not ready yet + if [ ${scanTimestamp} -eq -2 ]; then + scanProgress="prepare sync" + # in case LND restarting >2 + elif [ ${startcountLightning} -gt 2 ]; then + scanProgress="${startcountLightning} restarts" + # unkown cases + else + scanProgress="waiting" + fi + elif [ ${#scanProgress} -lt 6 ]; then + scanProgress=" ${scanProgress} %" + else + scanProgress="${scanProgress} %" + fi + + # setting info string + infoStr=" Blockchain Progress : ${syncProgress}\n Lightning Progress : ${scanProgress}\n ${actionString}" + + # set admin string + if [ ${lcd} -eq 1 ]; then + adminStr="ssh admin@${localip} ->Password A" + else + adminStr="Use CTRL+c to EXIT to Terminal" + fi + + # display info to user + dialog --title " Node is Syncing " --backtitle "RaspiBlitz ${codeVersion} ${hostname} / ${network} / ${chain} / ${tempCelsius}°C" --infobox "${infoStr}\n ${adminStr}" ${height} ${width} + + # determine to loop or not + loop=0 + if [ ${loopUntilSynced} -eq 1 ] && [ "${syncedToChain}" == "0" ]; then + # loop until synced to chain + loop=1 + fi +done \ No newline at end of file From efb3c60419ed8f75f70229ea46488acdb307f3b1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:27:49 -0500 Subject: [PATCH 268/293] fix peers --- home.admin/setup.scripts/eventBlockchainSync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index 222028dee..a22a7c5e5 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -38,9 +38,9 @@ do syncProgress="${startcountBlockchain} restarts" fi elif [ ${#syncProgress} -lt 6 ]; then - syncProgress=" ${syncProgress} % ${peers} peers" + syncProgress=" ${syncProgress} % ${blockchainPeers} peers" else - syncProgress="${syncProgress} % ${peers} peers" + syncProgress="${syncProgress} % ${blockchainPeers} peers" fi # formatting LIGHTNING SCAN PROGRESS From 034d11e8902685dba02707c16e2b22dfb344581f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:29:10 -0500 Subject: [PATCH 269/293] shorten 2nd parameter --- home.admin/setup.scripts/eventBlockchainSync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index a22a7c5e5..5ad33e146 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -14,7 +14,7 @@ fi # 2nd PARAMETER (optional): -loop-until-synced loopUntilSynced=0 -if [ "$2" == "-loop-until-synced" ]; then +if [ "$2" == "loop" ]; then loopUntilSynced=1 fi From d4b9ee4d53b4f4f5aed60ac2be3d836c29672747 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:30:09 -0500 Subject: [PATCH 270/293] add sleep --- home.admin/setup.scripts/eventBlockchainSync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index 5ad33e146..125026cc7 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -79,5 +79,6 @@ do if [ ${loopUntilSynced} -eq 1 ] && [ "${syncedToChain}" == "0" ]; then # loop until synced to chain loop=1 + sleep 3 fi done \ No newline at end of file From bfcbbe1501cce25f66e540b8f16d0ba038410f26 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:32:14 -0500 Subject: [PATCH 271/293] add sync to raspiblitz --- home.admin/00raspiblitz.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4c854e071..b680aa7a2 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -106,12 +106,11 @@ do echo "Gathering Info ... (please wait)" source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) if [ "${syncedToChain}" == "0" ]; then - + /home/admin/setup.scripts/eventBlockchainSync.sh ssh loop fi doneIBD=1 fi - ##################################### # MAIN MENU or BLOCKCHAIN SYNC ##################################### From 995a6fc882e5437090d14c68da6962166c40b26b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 20:33:16 -0500 Subject: [PATCH 272/293] clean up main menu --- home.admin/00raspiblitz.sh | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index b680aa7a2..acb69f2c7 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -117,26 +117,12 @@ do # when setup is done & state is ready .. jump to main menu if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then - - # TODO: move data gathering into background and get thru raspiblitz.info/redis - source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) - if [ "${initialSync}" == "1" ] && [ "${syncedToChain}" == "0" ]; then - - # BLOCKCHAIN SYNC SCREEN - echo "Sync: ${syncProgress}" - sleep 4 - - else - - # MAIN MENU - /home/admin/00mainMenu.sh - # use the exit code from main menu as signal if menu loop should exited - # 0 = continue loop / everything else = break loop and exit to terminal - exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ]; then break; fi - - fi - + # MAIN MENU + /home/admin/00mainMenu.sh + # use the exit code from main menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi fi ##################################### From 2f71aaa244f8342b1627c075eb07c9cb91e30b73 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 25 May 2021 22:10:57 -0500 Subject: [PATCH 273/293] blockchain options placeholder --- home.admin/00raspiblitz.sh | 15 +++++---------- home.admin/_bootstrap.sh | 5 +++++ home.admin/setup.scripts/finalDialogControl.sh | 12 ++++++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index acb69f2c7..35894d924 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -95,20 +95,15 @@ do if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then # push to final setup gui dialogs /home/admin/setup.scripts/finalDialogControl.sh - state="starting" + continue fi ##################################### - # INITIAL BLOCKCHAIN SYNC + # INITIAL BLOCKCHAIN SYNC (SUBLOOP) ##################################### - if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ ${doneIBD} -eq 0 ]; then - # check if initial Blockchain sync is in progress - echo "Gathering Info ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) - if [ "${syncedToChain}" == "0" ]; then - /home/admin/setup.scripts/eventBlockchainSync.sh ssh loop - fi - doneIBD=1 + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ "${initialSync}" == "1" ]; then + /home/admin/setup.scripts/eventBlockchainSync.sh ssh loop + continue fi ##################################### diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 4a559238c..3d3df525f 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -519,6 +519,11 @@ if [ ${isMounted} -eq 0 ]; then ################################################### if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "migration" ]; then + echo "# Gather info on blockchain sync ..." >> $logFile + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + if [ "${syncProgress}" == "" ]; then syncProgress="0"; fi + syncProgress=$(echo "${syncProgress}" | cut -d "." -f1) + echo "syncProgress=${syncProgress}" >> ${infoFile} echo "# Go into WAIT LOOP for final setup dialog ..." >> $logFile sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 43bd980ea..8baea9456 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -23,6 +23,18 @@ if [ "${setupPhase}" == "setup" ]; then done fi +############################################ +# BLOCKCHAIN INFO & OPTIONS + +if [ ${syncProgress} -lt 99 ]; then + clear + echo "Your Blockchain is at ${syncProgress}% - this might take multiple days to validate." + echo "TODO: Option COPY OVER LAN IF BITCOIN" + echo "TODO: MAKE SURE THAT background.service is running from beginng!" + echo "PRESS ENTER" + read key +fi + ############################################ # SETUP DONE CONFIRMATION (Konfetti Moment) From f77f9bf2c438620bdb01492d6c437188a210e521 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 09:21:42 -0500 Subject: [PATCH 274/293] run background task from the begenning --- home.admin/_background.sh | 52 ++++++++++++++++++++++++++++----------- home.admin/_bootstrap.sh | 25 +++++++++++++------ 2 files changed, 55 insertions(+), 22 deletions(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index 077cf1830..6fcfaed6d 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -39,15 +39,47 @@ do # count up counter=$(($counter+1)) + # limit counter to max seconds per week: + # 604800 = 60sec * 60min * 24hours * 7days + if [ ${counter} -gt 604800 ]; then + counter=0 + echo "counter zero reset" + fi + # gather the uptime seconds upSeconds=$(cat /proc/uptime | grep -o '^[0-9]\+') - # prevent restart if COPY OVER LAN is running - # see: https://github.com/rootzoll/raspiblitz/issues/1179#issuecomment-646079467 - source ${infoFile} - if [ "${state}" == "copysource" ]; then - echo "copysource mode: skipping background loop" - sleep 10 + # source info file fresh on every loop + source ${infoFile} 2>/dev/null + + #################################################### + # SKIP BACKGROUND TASK LOOP ON CERTAIN SYSTEM STATES + # https://github.com/rootzoll/raspiblitz/issues/160 + #################################################### + + if [ "${state}" == "" ] || [ "${state}" == "copysource" ]; then + echo "skipping background loop (${counter}) - state(${state})" + sleep 1 + continue + fi + + #################################################### + # CHECK IF LOCAL IP CHANGED + #################################################### + oldLocalIP="${localip}"; + source <(/home/admin/config.scripts/internet.sh status) + if [ "${oldLocalIP}" != "${localip}" ]; then + echo "local IP changed old(${oldLocalIP}) new(${localip}) - updating in raspiblitz.info" + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + fi + + #################################################### + # SKIP REST OF THE TASKS IF STILL IN SETUP PHASE + #################################################### + + if [ "${setupPhase}" != "done" ]; then + echo "skipping rest of tasks because still in setupPhase(${setupPhase})" + sleep 1 continue fi @@ -356,7 +388,6 @@ do fi - ############################### # LND AUTO-UNLOCK ############################### @@ -465,12 +496,5 @@ do # sleep 1 sec sleep 1 - # limit counter to max seconds per week: - # 604800 = 60sec * 60min * 24hours * 7days - if [ ${counter} -gt 604800 ]; then - counter=0 - echo "counter zero reset" - fi - done diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 3d3df525f..dc10b5372 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -143,6 +143,23 @@ else echo "No SSHRESET switch found. " >> $logFile fi +################################ +# BACKGROUND TASK RUN FROM BEGINNING +# on 1.7 sd card build background task runs after boostrap +# but bootstrap already needs background task running now +# REMOVE ON v1.8 release #2328 +################################ + +backgroundNeedsEdit=$(sudo cat /etc/systemd/system/background.service 2>/dev/null | grep -c 'Wants=bootstrap.service') +if [ ${backgroundNeedsEdit} -eq 1 ]; then + echo "BACKGROUND EDIT needed ..." >> $logFile + sudo sed -i "s/^Wants=.*/Wants=network.target/g" /etc/systemd/system/background.service + sudo sed -i "s/^After=.*/After=network.target/g" /etc/systemd/system/background.service + systemInitReboot=1 +else + echo "BACKGROUND EDIT already done. " >> $logFile +fi + ################################ # FS EXPAND # if a file called 'ssh.reset' gets @@ -281,10 +298,6 @@ do sed -i "s/^message=.*/message='>=1TB'/g" ${infoFile} fi - # get latest network info & update raspiblitz.info (in case network changes) - source <(/home/admin/config.scripts/internet.sh status) - sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} - # wait for next check sleep 2 @@ -417,10 +430,6 @@ if [ ${isMounted} -eq 0 ]; then until [ "${state}" == "waitprovision" ] do - # get latest network info & update raspiblitz.info (in case network changes) - source <(/home/admin/config.scripts/internet.sh status) - sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} - # get fresh info about data drive (in case the hdd gets disconnected) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) if [ "${hddCandidate}" == "" ]; then From 4864fc5dcf0279e2bfc4266347fd372a5164ef0f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:01:42 -0500 Subject: [PATCH 275/293] improve Tor detection --- home.admin/config.scripts/internet.tor.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 2666efa57..77025e353 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -273,14 +273,13 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "" echo "*** Check if Tor service is functional ***" torRunning=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep "Congratulations. This browser is configured to use Tor." -c) - if [ ${torRunning} -gt 0 ]; then - clear + if [ "${torRunning}" == "0" ]; then + echo "Tor not running ... proceed with switching to Tor." + echo "" + else echo "You are all good - Tor is already running." echo "" exit 0 - else - echo "Tor not running ... proceed with switching to Tor." - echo "" fi # install package just in case it was deinstalled From c4d601d10d229853aa607e2a7434c210b9c02a20 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:04:27 -0500 Subject: [PATCH 276/293] fix Tor detection --- home.admin/config.scripts/internet.tor.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 77025e353..3ccd75639 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -272,9 +272,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunning=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep "Congratulations. This browser is configured to use Tor." -c) + torRunning=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunning}" == "0" ]; then - echo "Tor not running ... proceed with switching to Tor." + echo "Tor not running (${torRunning})... proceed with switching to Tor." echo "" else echo "You are all good - Tor is already running." From 32747d4073af802505aee9fc3d601f595484cfeb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:05:59 -0500 Subject: [PATCH 277/293] test tor running --- home.admin/config.scripts/internet.tor.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 3ccd75639..cd7b158b0 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -272,9 +272,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunning=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") - if [ "${torRunning}" == "0" ]; then - echo "Tor not running (${torRunning})... proceed with switching to Tor." + torRunningTest=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") + if [ "${torRunningTest}" == "0" ]; then + echo "Tor not running (${torRunningTest})... proceed with switching to Tor." echo "" else echo "You are all good - Tor is already running." From dfaaf992299f59158bff980b275f2bcf51fa0733 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:09:05 -0500 Subject: [PATCH 278/293] improve tor detection --- home.admin/config.scripts/internet.tor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index cd7b158b0..16673785d 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -272,7 +272,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunningTest=$(curl --connect-timeout 10 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") + torRunningTest=$(curl --connect-timeout 30 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then echo "Tor not running (${torRunningTest})... proceed with switching to Tor." echo "" From 69f882fe6cb39308768ba5d2e62ab9830f3ef170 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:47:35 -0500 Subject: [PATCH 279/293] change tor test --- home.admin/_provision.setup.sh | 2 ++ home.admin/_provision_.sh | 3 +++ home.admin/assets/bitcoin.conf | 8 ++++++++ home.admin/assets/litecoin.conf | 8 ++++++++ home.admin/config.scripts/internet.tor.sh | 16 +++------------- 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 3e490de30..7b6f93d41 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -199,6 +199,8 @@ if [ "${lightning}" == "lnd" ]; then sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} + + # make sure LND starts with Tor by default sudo /home/admin/config.scripts/internet.tor.sh lndconf-on >> ${logFile} # start lnd up diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 752a8b018..a27969b76 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -104,6 +104,9 @@ if [ "${network}" = "litecoin" ]; then /home/admin/config.scripts/blitz.litecoin.sh on >> ${logFile} fi +echo "# Make sure the user bitcoin is in the debian-tor group" +sudo usermod -a -G debian-tor bitcoin + # set hostname data echo "Setting lightning alias: ${hostname}" >> ${logFile} sudo sed -i "s/^alias=.*/alias=${hostname}/g" /home/admin/assets/lnd.${network}.conf >> ${logFile} 2>&1 diff --git a/home.admin/assets/bitcoin.conf b/home.admin/assets/bitcoin.conf index 45fbe80b3..b9a32c9ca 100755 --- a/home.admin/assets/bitcoin.conf +++ b/home.admin/assets/bitcoin.conf @@ -29,3 +29,11 @@ maxconnections=40 maxuploadtarget=5000 datadir=/mnt/hdd/bitcoin + +# tor by default +onlynet=onion +proxy=127.0.0.1:9050 +main.bind=127.0.0.1 +test.bind=127.0.0.1 +dnsseed=0 +dns=0 diff --git a/home.admin/assets/litecoin.conf b/home.admin/assets/litecoin.conf index 24b9bbfab..83e8ce6af 100755 --- a/home.admin/assets/litecoin.conf +++ b/home.admin/assets/litecoin.conf @@ -27,3 +27,11 @@ discardfee=0.00000001 mintxfee=0.00000001 minrelaytxfee=0.00000001 datadir=/mnt/hdd/litecoin + +# tor by default +onlynet=onion +proxy=127.0.0.1:9050 +main.bind=127.0.0.1 +test.bind=127.0.0.1 +dnsseed=0 +dns=0 diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 16673785d..32a481646 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -29,11 +29,8 @@ activateBitcoinOverTOR() # make sure all is turned off and removed and then activate fresh (so that also old settings get removed) deactivateBitcoinOverTOR - echo "# Make sure the user bitcoin is in the debian-tor group" - sudo usermod -a -G debian-tor bitcoin sudo chmod 777 /home/bitcoin/.${network}/${network}.conf echo "Adding Tor config to the the ${network}.conf ..." - # deprecate 'torpassword=' sudo sed -i "s/^torpassword=.*//g" /home/bitcoin/.${network}/${network}.conf echo "onlynet=onion" >> /home/bitcoin/.${network}/${network}.conf echo "proxy=127.0.0.1:9050" >> /home/bitcoin/.${network}/${network}.conf @@ -41,15 +38,7 @@ activateBitcoinOverTOR() echo "test.bind=127.0.0.1" >> /home/bitcoin/.${network}/${network}.conf echo "dnsseed=0" >> /home/bitcoin/.${network}/${network}.conf echo "dns=0" >> /home/bitcoin/.${network}/${network}.conf - if [ "${network}" = "bitcoin" ]; then - # adding some bitcoin onion nodes to connect to to make connection easier - echo "main.addnode=ira7kqcbff52wofoong2dieh2xlvmw4e7ya3znsqn7wivn6armetvrqd.onion" >> /home/bitcoin/.${network}/${network}.conf - echo "main.addnode=xlpi353v7ia5b73msynr7tmddgxoco7n2r2bljt5txpv6bpzzphkreyd.onion" >> /home/bitcoin/.${network}/${network}.conf - echo "main.addnode=ccjrb6va3j6re4lg2lerlt6wyvlb4tod7qbe7rwiouuapb7etvterxyd.onion" >> /home/bitcoin/.${network}/${network}.conf - echo "main.addnode=s7m4mnd6bokujhywsocxibispktruormushdroeaeqeb3imvztfs3vid.onion" >> /home/bitcoin/.${network}/${network}.conf - echo "main.addnode=ldvhlpsrvspquqnl3gutz7grfu5lb3m2dgnezpl3tlkxgpoiw2g5mzid.onion" >> /home/bitcoin/.${network}/${network}.conf - echo "main.addnode=gliovxxzyy2rkwaoz25khf6oa64c3csqzjn3t6dodsjuf34w6a6ktsyd.onion" >> /home/bitcoin/.${network}/${network}.conf - fi + # remove empty lines sudo sed -i '/^ *$/d' /home/bitcoin/.${network}/${network}.conf sudo chmod 444 /home/bitcoin/.${network}/${network}.conf @@ -272,7 +261,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunningTest=$(curl --connect-timeout 30 --socks5-hostname 127.0.0.1:9050 https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") + torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") + #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then echo "Tor not running (${torRunningTest})... proceed with switching to Tor." echo "" From ef3823456ca067346a888b913749208ce7c380fc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:48:41 -0500 Subject: [PATCH 280/293] debug test --- home.admin/config.scripts/internet.tor.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 32a481646..24d207388 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -261,7 +261,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") + torRunningTest=1 + #torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then echo "Tor not running (${torRunningTest})... proceed with switching to Tor." From eeb7c331a8542e5ce6eebb710248d6111ff28da7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:49:13 -0500 Subject: [PATCH 281/293] dubug test --- home.admin/config.scripts/internet.tor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 24d207388..5f7afaaf1 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -261,7 +261,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunningTest=1 + torRunningTest=$(echo "1") #torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then From 4c339af3a971937145b5eea141d2294a35dee73f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:50:36 -0500 Subject: [PATCH 282/293] fix tor detection --- home.admin/config.scripts/internet.tor.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 5f7afaaf1..32a481646 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -261,8 +261,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "*** Check if Tor service is functional ***" - torRunningTest=$(echo "1") - #torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") + torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then echo "Tor not running (${torRunningTest})... proceed with switching to Tor." From 581c80326ee3cd62b012071ab73f7610b8dbbd41 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:55:59 -0500 Subject: [PATCH 283/293] remove paging --- home.admin/config.scripts/internet.tor.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index 32a481646..f249e786e 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -260,14 +260,14 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" - echo "*** Check if Tor service is functional ***" - torRunningTest=$(sudo systemctl status tor@default | grep -c "Active: active") + echo "# *** Check if Tor service is functional ***" + torRunningTest=$(sudo systemctl --no-pager status tor@default | grep -c "Active: active") #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then - echo "Tor not running (${torRunningTest})... proceed with switching to Tor." + echo "# Tor not running (${torRunningTest})... proceed with switching to Tor." echo "" else - echo "You are all good - Tor is already running." + echo "# You are all good - Tor is already running." echo "" exit 0 fi From 3d9e9b644283bc924f497bad363aa1645c75ff9e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 10:56:40 -0500 Subject: [PATCH 284/293] debug --- home.admin/config.scripts/internet.tor.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index f249e786e..b21ca9372 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -261,6 +261,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if Tor was already installed and is funtional echo "" echo "# *** Check if Tor service is functional ***" + sudo systemctl --no-pager status tor@default torRunningTest=$(sudo systemctl --no-pager status tor@default | grep -c "Active: active") #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") if [ "${torRunningTest}" == "0" ]; then From 47a1407f115bfbb1a583d55d4b6dd03bcce457a4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 11:02:31 -0500 Subject: [PATCH 285/293] extend tor status --- home.admin/config.scripts/internet.tor.sh | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index b21ca9372..e37d389d6 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -183,6 +183,11 @@ if [ -f "/mnt/hdd/raspiblitz.conf" ]; then source /mnt/hdd/raspiblitz.conf fi +torRunning=$(sudo systemctl --no-pager status tor@default | grep -c "Active: active") +torFunctional=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") +if [ "${torFunctional}" == "" ]; then torFunctional=0; fi +if [ ${torFunctional} -gt 1 ]; then torFunctional=1; fi + # if started with status if [ "$1" = "status" ]; then # is Tor activated @@ -191,7 +196,8 @@ if [ "$1" = "status" ]; then else echo "activated=0" fi - + echo "torRunning=${torRunning}" + echo "torFunctional=${torFunctional}" echo "config='${torrc}'" exit 0 fi @@ -258,21 +264,6 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # setting value in raspi blitz config sudo sed -i "s/^runBehindTor=.*/runBehindTor=on/g" /mnt/hdd/raspiblitz.conf - # check if Tor was already installed and is funtional - echo "" - echo "# *** Check if Tor service is functional ***" - sudo systemctl --no-pager status tor@default - torRunningTest=$(sudo systemctl --no-pager status tor@default | grep -c "Active: active") - #torRunningTest=$(curl --connect-timeout 30 --socks5-hostname "127.0.0.1:9050" https://check.torproject.org 2>/dev/null | grep -c "Congratulations. This browser is configured to use Tor.") - if [ "${torRunningTest}" == "0" ]; then - echo "# Tor not running (${torRunningTest})... proceed with switching to Tor." - echo "" - else - echo "# You are all good - Tor is already running." - echo "" - exit 0 - fi - # install package just in case it was deinstalled packageInstalled=$(dpkg -s tor-arm | grep -c 'Status: install ok') if [ ${packageInstalled} -eq 0 ]; then From aaefb8df10441a3f43b464372c0a5e20809ac6e3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 11:04:10 -0500 Subject: [PATCH 286/293] only provision Tor when not running --- home.admin/_provision_.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index a27969b76..abfefe4dd 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -233,7 +233,8 @@ else fi # TOR -if [ "${runBehindTor}" = "on" ]; then +source <(/home/admin/config.scripts/internet.tor.sh status) +if [ "${runBehindTor}" == "on" ] && [ "${torRunning}" == "0" ]; then echo "Provisioning TOR - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup Tor (takes time)'/g" ${infoFile} sudo /home/admin/config.scripts/internet.tor.sh on >> ${logFile} 2>&1 From 541f1defc0f5dd900830c2060bc09b6efb114a5f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 11:07:35 -0500 Subject: [PATCH 287/293] setting password B on setup --- home.admin/_provision.setup.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 7b6f93d41..51226db4e 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -33,6 +33,7 @@ if [ "${passwordA}" == "" ]; then exit 1 fi +echo "SETTING PASSWORD A" >> ${logFile} sudo /home/admin/config.scripts/blitz.setpassword.sh a "${passwordA}" >> ${logFile} ################################### @@ -87,6 +88,10 @@ sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf sudo mkdir /home/admin/.${network} 2>/dev/null sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf +# set password B as RPC password +echo "SETTING PASSWORD B" >> ${logFile} +sudo /home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile} + # optimize RAM for blockchain validation (bitcoin only) if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then echo "*** Optimizing RAM for Sync ***" >> ${logFile} From d0f4e8d12edacbe51162337918a711d538682927 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 11:09:18 -0500 Subject: [PATCH 288/293] unlock lnd on setup --- home.admin/_provision.setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 51226db4e..e3f28b061 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -337,7 +337,7 @@ if [ "${lightning}" == "lnd" ]; then locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) if [ ${locked} -gt 0 ]; then echo "OK - Wallet is locked ... starting unlocking dialog" >> ${logFile} - /home/admin/config.scripts/lnd.unlock.sh >> ${logFile} + /home/admin/config.scripts/lnd.unlock.sh "${passwordC}" >> ${logFile} else echo "OK - Wallet is already unlocked" >> ${logFile} fi From 950cbbd6e9f93c1dd211b2510d4f567b5dae1234 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 12:04:57 -0500 Subject: [PATCH 289/293] base info in raspiblitz.info --- home.admin/_provision_.sh | 5 +++++ home.admin/config.scripts/network.monitor.sh | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index abfefe4dd..0cd0444fe 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -606,6 +606,11 @@ if [ ${confExists} -eq 0 ]; then sudo chown bitcoin:bitcoin /mnt/hdd/bitcoin/bitcoin.conf fi +# make sure basic info id in raspiblitz.info +sudo sed -i "s/^network=.*/network=${network}/g" ${infoFile} +sudo sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} +sudo sed -i "s/^lightning=.*/lightning=${lightning}/g" ${infoFile} + # singal setup done sudo sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} diff --git a/home.admin/config.scripts/network.monitor.sh b/home.admin/config.scripts/network.monitor.sh index 3df770e16..21ee97bd5 100755 --- a/home.admin/config.scripts/network.monitor.sh +++ b/home.admin/config.scripts/network.monitor.sh @@ -9,8 +9,8 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then exit 1 fi -source /mnt/hdd/raspiblitz.conf source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf ################### # STATUS From cf4ddfc7eb78edd8845f00f259a65ba3046265f7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 12:06:40 -0500 Subject: [PATCH 290/293] update final dialog --- home.admin/setup.scripts/finalDialogControl.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/finalDialogControl.sh b/home.admin/setup.scripts/finalDialogControl.sh index 8baea9456..18c14ef74 100755 --- a/home.admin/setup.scripts/finalDialogControl.sh +++ b/home.admin/setup.scripts/finalDialogControl.sh @@ -26,7 +26,7 @@ fi ############################################ # BLOCKCHAIN INFO & OPTIONS -if [ ${syncProgress} -lt 99 ]; then +if [ ${syncProgress} -lt 75 ]; then clear echo "Your Blockchain is at ${syncProgress}% - this might take multiple days to validate." echo "TODO: Option COPY OVER LAN IF BITCOIN" @@ -60,5 +60,7 @@ else read key fi +echo "Starting ..." + # signal to backend that all is good and it can continue sudo sed -i "s/^state=.*/state='finalready'/g" /home/admin/raspiblitz.info \ No newline at end of file From 27f32959f68b9c4fa5ab371753c07552471ac7b1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 13:05:52 -0500 Subject: [PATCH 291/293] c-lightning setup dialogs --- .../dialogLightningWallet-cln.sh | 146 ++++++++++++++++++ ...Wallet.sh => dialogLightningWallet-lnd.sh} | 0 .../setup.scripts/setupDialogControl.sh | 27 +++- 3 files changed, 168 insertions(+), 5 deletions(-) create mode 100644 home.admin/setup.scripts/dialogLightningWallet-cln.sh rename home.admin/setup.scripts/{dialogLightningWallet.sh => dialogLightningWallet-lnd.sh} (100%) diff --git a/home.admin/setup.scripts/dialogLightningWallet-cln.sh b/home.admin/setup.scripts/dialogLightningWallet-cln.sh new file mode 100644 index 000000000..650c8d144 --- /dev/null +++ b/home.admin/setup.scripts/dialogLightningWallet-cln.sh @@ -0,0 +1,146 @@ +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" +source $SETUPFILE + +# flags for sub dialogs after choice +uploadRESCUE=0 +enterSEED=0 + +OPTIONS=() +OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") +OPTIONS+=(OLD "I had an old Node I want to recover/restore") +CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +if [ "${CHOICE}" == "NEW" ]; then + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + +elif [ "${CHOICE}" == "OLD" ]; then + + CHOICE="" + while [ "${CHOICESUB}" == "" ] + do + + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(CLNRESCUE "CLN tar.gz-Backupfile (BEST)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER CLN DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + if [ "${CHOICESUB}" == "CLNRESCUE" ]; then + + # just activate LND rescue upload + uploadRESCUE=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # dont set password c anymore - mark the rest + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then + + # let people know about just seed backup + whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " +Using JUST SEED WORDS will only recover your on-chain funds. +To recover also your channel funds a complete rescue-backup +from your old node would be recommended. + " 11 65 + + if [ $? -eq 1 ]; then + # when user wants to go back + CHOICESUB="" + else + # activate SEED input & SCB upload + enterSEED=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + + fi + + else + # user cancel - signal to outside app by exit code (2 = submenu) + exit 2 + fi + + done + +else + # user cancel - signal to outside app by exit code (1 = mainmenu) + exit 1 +fi + +# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) +if [ ${uploadRESCUE} -eq 1 ]; then + + # run upload dialog and get result + _temp="/var/cache/raspiblitz/temp/.temp.tmp" + clear + echo "TODO: cln.backup.sh cln-import-gui" + sleep 8 + #/home/admin/config.scripts/cln.backup.sh cln-import-gui setup $_temp + source $_temp 2>/dev/null + sudo rm $_temp 2>/dev/null + + # if user canceled upload + if [ "${clnrescue}" == "" ]; then + # signal cancel to the calling script by exit code (3 = exit on lndrescue) + exit 3 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^clnrescue=/d' $SETUPFILE + + # store result in setup state + echo "clnrescue='${lndrescue}'" >> $SETUPFILE +fi + +# INPUT LIGHTNING SEED dialog (if activated by dialogs above) +if [ ${enterSEED} -eq 1 ]; then + + # start seed input and get results + _temp="/var/cache/raspiblitz/.temp.tmp" + clear + echo "TODO: cln.backup.sh seed-import-gui" + sleep 8 + #/home/admin/config.scripts/cln.backup.sh seed-import-gui $_temp + source $_temp 2>/dev/null + sudo rm $_temp 2>/dev/null + + # if user canceled the seed input + if [ "${seedWords}" == "" ]; then + # signal cancel to the calling script by exit code (4 = exit on seedwords) + exit 4 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^seedWords=/d' $SETUPFILE + sudo sed -i '/^seedPassword=/d' $SETUPFILE + + # write the seed data into the setup state + echo "seedWords='${seedWords}'" >> $SETUPFILE +fi \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet-lnd.sh similarity index 100% rename from home.admin/setup.scripts/dialogLightningWallet.sh rename to home.admin/setup.scripts/dialogLightningWallet-lnd.sh diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index fb1ca9fe4..e48ea8aef 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -225,20 +225,37 @@ if [ "${setupPhase}" == "setup" ]; then # because password C not needed if LND rescue file is uploaded lightningWalletDone=0 + source ${SETUPFILE} + if [ "${lightning}" == "" ]; then lightningWalletDone=1; fi while [ "${lightningWalletDone}" == "0" ] do - echo "# Starting lightning wallet dialog ..." - /home/admin/setup.scripts/dialogLightningWallet.sh + if [ "${lightning}" == "lnd" ]; then - # only if dialog exited clean end loop - if [ "$?" == "0" ]; then + echo "# Starting lightning wallet dialog for LND ..." + /home/admin/setup.scripts/dialogLightningWallet-lnd.sh + dialogResult=$? + + elif [ "${lightning}" == "cln" ]; then + + echo "# Starting lightning wallet dialog for C-LIGHTNING ..." + /home/admin/setup.scripts/dialogLightningWallet-cln.sh + dialogResult=$? + + else + echo "FAIL: unkown lightning implementation (${lightning})" + lightningWalletDone=1 + sleep 8 + fi + + # break loop only if a clean exit + if [ "${dialogResult}" == "0" ]; then lightningWalletDone=1 fi # allow user to cancel to terminal on dialog main menu # all other cancels have other exit codes - if [ "$?" == "1" ]; then + if [ "${dialogResult}" == "1" ]; then echo "# you selected cancel - sending exit code 1" exit 1 fi From 6aa7a49b404dce54a740ea2971f735d7c24d9401 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 26 May 2021 13:22:29 -0500 Subject: [PATCH 292/293] add c-lightning implement notes --- home.admin/_provision.setup.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index e3f28b061..2ee5a61ad 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -360,11 +360,18 @@ if [ "${lightning}" == "cln" ]; then # c-lightning sudo sed -i "s/^message=.*/message='c-lightning Setup'/g" ${infoFile} + # TODO: implement sed -i "s/^state=.*/state=error/g" ${infoFile} sed -i "s/^message=.*/message='TODO: install c-lightning'/g" ${infoFile} echo "FAIL see ${logFile}" echo "TODO: install c-lightning!" >> ${logFile} exit 1 + + # these vars are available from the setup process for cln loaded from setupfile + # seedWords --> if entered on old seed + # clnrescue --> if user uploaded a rescue file + # setPasswordC --> for any new wallet encryption + fi sudo sed -i "s/^message=.*/message='Provision Setup Finish'/g" ${infoFile} From b3158cf76a03d083d02cbe6c252734a5fec7b9ee Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 28 May 2021 14:31:06 -0500 Subject: [PATCH 293/293] prepare c-lightning --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09702ba1e..e71f3559b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning Node on a RaspberryPi with a nice Display.* -`Version 1.7.0 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` +`Version 1.7.0 with lnd 0.12.1 (or c-lightning 0.10.0) and bitcoin 0.21.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg)

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∈&O}_5}^-2U%5o6*zlu}fZ z@k0A*(xVFE^-I>pnv^lN>e6Lpvg>A3EZb84h4g2#AJ$9>oRy*XVJ3 z*Xvv-7J}1Ij@q!DN1HuSOb3&Lw|W^_Gc&~nbAH!`&;pe?JNxxJD%)FIS;X4Y!T`bb z*4dnOcE!BwzH zP>vzyh?ARnkp=?NSbxkA7Q_|&kW3}P@B63mk`iZM_u#ibb#;wG*Oj~V;vCrq^GpT& zJ#lP;KQKt!)L&JbA_xZ16H+v99V0J2@@=JhmsdN73MsAKBmJ^K2p|j@2-ul&bk0cp zz-Pw|jx%q!N5N=KU;XgvulEf(jrvXIMQu7mw&)-cJB=%68YY@DRf4L^{Rxh4(<54Z zNv2c#OFdP7@+K*nhi{oHM+ntXzfv>**n(GTBs0My&j1b5hqjmhuB<+HS5|x?fDBqk zpd8&#b6-_;LFS2g?1=bm*9Z5i@cXWH*DQMiEpD89GZoR3h0leQ_i&O}`<1oH$~KU+2%0M(sR z`VBb1C6eeP@3u6xe4r0fg8b$kE9771!K^amFf7*4T+2`ZwC$|ZF@E{k zE?L~uLb-mJ4rl!h@`+8%XX^E`7(Tri0lxiQ$tDqgU?X{e?4(1zwm(%~GtIqX+Lw4= zzZxJevItsx(K2zZdVcuubPQ`7k^))CIHHJA_#_X?{K&})7aEA--hPV*-^S9QKN$Y_ zTR#j|519+tb=t5GVn7y{8k_wvzH3S1-Nu+(eyH}`FO{fR$^V@v5FmsPdPMqf%{`TX zXFFcAwqJWTyPX7h+fc&m-0jVE*a=<5#yrfvXvsaPdfBEny|c+LO6hSJBv?`l=ey^B z)YD2a6g!A9XrlZ*#mI7%`DGS&~hsc+`5+pSHa(?9T zuR)|*6ehj+M4N|@=ii7eB00$crjAGKoAduY76$GfH#_IsIwaUwn4=s+#bYwGP|zyk ziyt=RGD+NOL(qM|-&-0A+n)QC2FO}AG!==SQ;`)6SUw7R%@Y(xagz+V9L3hgP#_{_ zVM5LN_xdheb_Zn;1FAX?tioAh1`kF)efspcgQwvV;JTy*cl)X6VgRZJ4-pt30K&Lt z-H%X8#q{*!5@G-+>!UMJJHnr}m;l(n{#U47^KkwN%T~}L5xg?>hX)idk>B;LuYPnAny<>|w0&NG_b{e1{Nz1-6cQ8vTU zvbK!P#dDqTm*|$IV4{EJ`pZw?@v$Vp*euLbJjitL>PmyN^c9X&LDF}h^1_QgqdCWazJpPU%RsZ44{~--TO_1M>!~tmK3GLDW{8ZSKIiX8S z&)xD5zy8iTK6gX_cr(O*Is-6=1>a}nz=iK45*h`3E8vm4Eu&(hHNIO zl)%7=?pL7iSjn%T&)fVv;FU01`d1T(0dR+u4I=j8qop1BTEGgaX;;j%EIRlfaw?8duwaThYug-l~V}_BLS|g$!a${ue*~AOXEGRrrgBDHz3X5 zq*UV@e}$kzo&SmiS!2CPjKW3p`9ooa2W>@eRX-z9`^QzafY$v0;m>+k2>Bf_Yzw*s zhS%3)v{Hx27kph9f&Vw%l3sh)`_$j42Zw$I0Q21sd~9Mj^!T>^maWmWPG{oW`om1S zb#EPztHIj@*b^U_K;Mu8h9K)*#3p=pD1=`VngWN5bTA4^6FkjRBB7H@PZB!Hs{cYi ztQA9|^ufQg6nuAxt)L_VzH?*KUV_31((6lhHDC`eq|j8h{Rb-zY+bL;jKHfI{;W+ zI7uC?AzTE0O!zS+%*A2aQHg;GxUFD zDX4I@?|l-C|8*l2aS9h?4A5donI*RjH>hOL-K{CEtPunIcWK}QR+=OYT8*=H8G-A0g=+p*LU^{74Cp-E4G&;y&3O&mfUq0h zL#$dj+M(}*f(Jb2!a)N@W<`BZ^&O)(&kn^7BIvsv>M;I8CUy7`uvv}i z7R8A6aD4#mf9t&RZk;duLH9i7$W{P6i__E7g1cS#Pd)}+zTnpTY#;Gk*s|cSi-Ub7 z*(S&Wt{K&5-;h@a^B+R_%4~lu6LoRfme}qBdd#*rT~BS3+aDq#OGkdg6Qg=XC;@It zU&xAfpx<(EzP${s>}z(uzM4CCI`e!{X0;eMlQ6VP4qbo2m(*Bjgif%a(xLz>^K{5T zXld3BA}ciCsnmKA@<>n#i^41}I~x&lJ+m1ntgr95ul1C)?T{!0l#ml%VvIQVNLBnTgbX{h@I0hQ{*Jp|P8 zz7EBt=&)e$k&ybW~ruzw}UD|;e)X5YZ50V3E@F_GY~fV%(LOgB7JjU^5Py1ntca;xF%lox2AR*Mf&~$CEF*yG?TsMFZfux^O$SZ_Ns~$W%H#gtI^Kt<6-0Fvk zsigp2(hKVW7fe2!Krqm2g8Z*)@aX_o@^G^Qy{E|>`0^ZR_E%k$zq9q>ZnhHOvz73c zUjECQ&VfB7^c6+xOJsDR;nKI0<5dRzJU*=hNNC@%>$N`z_@|X)>))L3&#!*-`BXM!KFaY$F5O0Uo}#WuS6>A^CBM9? zN*O3ROg!ars;3^#lKOPAJrR7~TCV^Ay~|ZgQqMf2nVAEiys4jXK=6UIdlMyF2CS&y z*pA=lmuJXdMr(T*P&)oa4iQejeo&VONDlOgUo?CPLCCE#vq|oD2p0oe7NAY^~@I zKn}&dc1B;E3D#+sKLo;GfFxD!3QR$N(r3g>0tv7< zC$inSMcTgjlBiE8*fW-Xu(2#D;!CwT!^X@~d7dzFU^;<0^?7wS^(4{5&EaoN*83|A zM!!ZI9;DtJ54VL+fBQ+Os!1#ApG-?SX&v=Ij)`IW80fxU@ZKBvGUPfiA!Vp>!t6_g z$W4?)cAU@QrVo^@tmuB{ocLf%rLk)tVu zpsGOa2NPIwlGzuIcTDtC;&O|d2fYN{zA96=9F~YZz;G3ZJYA*yv#fFz;I=@;18??R z0UZb(E05;LStkhHqRo^WCN+(xiy*FU7qG-;iih{^dDqwE_Hmq=C|HyU1m%eXO}#`y zFWD{UG4@YzY6Sd~l@9B(FtEIka%t5ffNB0%%frKPe~J$;g9Nv5 zK|9@MsnytUZ}wp|`s+{<>WxODdd{;=mSCNC3{vq$pjtCj0wU>7v_BRrg6gi7**k#A za(uOLHaRutOmzdp_Li+1-_dbSIoX^6dH-6O7n2i8jH05%5l&}9Fs?q2JE)ZF{xX?Z zPjo5V)*Es?Gqjjyg6Z$6$!;*07Jm!Vn66_p=$h;~ss(f$h`d@r;dMP^gyf_J~Io57yn}-$#l9 z0W&hI?%3o>nH47ZCU=n%i;M?!{)2;l?X9YgV-O~{J@0{^J3s0jvkZ{Xwes?OH^xrGeD%bU7Jpss>?!(S^B=0t z*e~CF8p}yzQOuEz;WC%LcbK;UM)c!l9`Pd{Bznlb&E{so*2lVCyiD%b@y!nsRIw8XuH9?wrMVUU~qV=@L|Dk9hzJk<&We zH;Lez%QoyER^6WJ`*?Np_}rb(MI1sO8IsnR`TX(eBc=xjAWXAT?Kkkz9bZ@11vYn^ z(zJ^0{dhh+$;Y@JXEVmVt3CJzmwg4RbsIY6`!5!3s!sODq}KZrSR0)7ju8FoD=y`O z9d;IE94I`rxUCoH!ugMVwOH3F5&SxG|8;^^1a7~oHtntj)e~0o7LTiw)=bO`egHYm zXYtTxj316uH={p(M3u9qVI!eK73?-1A^08T7c_*)L~GmqYH)EIJa!d=q>83L*Baa# zLPDP}ZYli%ob8Ib8czX}paM=XH^2v`KqkPG5Z|Wm2_y#h`&H_iY8w&Q}Y3=vC|vZW&kgZd)Un3frXHS(%xlsoEzW3$-hXf7SyN z@gUk3;m<_S!q4i;*sVW(a6h0KKe%_LB^=+`xqn=rR9t2G>%^IuLWuFaMZYto^3%g$ zH1>7blqU?#=^}w%p4Z*$%ySH$rp3fGhbh%)c1Gd{vhM5Sdy#V_+)lF;)w=D65W7S9 z3QjI^)VTrfE~Jx#vj}SXp3YE>-9@XeaychaBxGy~+C9s?a`&Nyh$ag#6)$|V%|zLG z0TTzcU(OA@+a89m4y&d#SrC!W@Kd}TcBe<2W=G<+J=C<-kIR+M5&STS1sTn!tPahW z0kX)|!mY8@=`!xiHcHs8^^milux|5PvVcFX!5iRMdSqEtzt9}6BEGsDJQy39>EA~; zR`+XDA7gLLXdsaqpDrXih0nR~M_u@=y7JLWW#mK8V40_=KWp0lMm4xTMbEj60meCQY=EARdoNr@2n*;_Dr3LL(? zdW&4J*`1Oo7A?{+A+>Sp(Hb4fYl1dJ>_LtL*8ZE~id?9~6)M%R+D~K4Xale~ws)81 zDXF3C4aF@7bwxb0 zDMEEp;-a2pQ!tCMrf#sGn(*&r5!s2QmlB!1Tri}Se{^t_m++%*Au?TVBbJ@!VmWvy zI`T=t%$4@V*91L>`2xidHy`kPo%sgEHIlA3)T+&&rAsHHS+|W&t@OQu!a2H6YsNGW z+8;xSM+G-Rl5itbBx|;w|l;#gqJa}D0qQ2Ee0z{lJL;7hez6068M-DJC5*>ldB9^k*0PT+I}_i}rF zF3sCYx0tDyA!5}|EN5NB1{`AG9`M`U{veF^0PdI+yfIl6XC#o><}glu3ivhy=4e>m z#aixP>*_kRCDJ&@*M=cPGfmeQoIxbM+Y>t%1fNMX$HiKnBs+`>Hw<1*obQZe20SF7 zFte(51mDzo-(rz)enUo|o8!BhN2Yf0O$q^#7++@mN-(Ptcnc%u^VDyg9jF!;3ksuY@cNWK*ZzZ6FjR|~)CR}5OT zOdQ}t&wNGq&$TSNTi$eUfYUXrH;LCr5FrJL;Rm+Trp^O|(+TWxj^U3!bXN@$>BA|) z5ZE~@Px|Yfp)5aPh*VW!7WsCan znR^JYzxjnB&7S|r|Kn1?{p3~ppWti3mMEK;0-&K|2^|;?S3Yk2#g&kj-ZM-;9+mq+AIGt8NdLXBWZ3*q-6aMG-kjl|(hnt7g z?>X@T{T#kzkbZrCQ$pgkz+3cx5BY39xO*w(jpsMQyW7RxpD1d0M<0*I&_n~xm1egn z$puD;aBW@hKQG0?s2z?JzFt@&4JrIjN0pS|9TgL)eb)i3b(Q2~41YA>wwK+?{qLQ? z4d(Y(o9&yF_4{6KNXLsHqI6Fd@vZuGNd02cw1K^ZdzH5pHKUW0EcWYz=Ysw)GG2qy zWT#n!Eur)@fZVwcb|X`6G~lMz;3V36gott$pQlLI6NuaPwYYe2RX2%Ar%c^x|3``) z8Rao?V1{5x(|Y+Z=I%n1Dv`jA$7b_0MY`S#+sr*df!E=N&t$0-Q_Rc&7g)P9?D12; zRgVe_!cnn&qQDF5dOnHM^kWDqpZeA54r5msd9>&CSzjrtMy- zuMmjf={Ni|b&c>IQEVZSdbt-)d$VGLJS&`!1u{1Af5-bObLS;fVEmsB72kt%#*@)6!*WCEFATFS?O?dR7w5i z0+{EM{p7HbX8h5|GaLo6#$tgEO6l4<^w&2w`GgI7T`_8f;Ma27mUbgEJ5%T*Z2j2u zqZhH3L-F{;RL@9e(Wuo&%+S#Jy?x_UH6}*Y;v=lsB&+(@Zl~L(W8+lfqVdQt^*$0g zFGABz#2KVu2nrK9$e*ohmlz_kZoHv#?`L#Bien4?diTEXNLgUxYNt5j3O{8vT(Djq zzz2?Q@o*aucPr27#2{0% z@OZ~zQnHQjPc4qkS+{fz_4^U`M~&#eo*fzpP`60DYH&U2R=9-DV_$4t(3eKV3oD&I zZgeSLY~mQ=AHZ53wpUNYmWpT5`f6UoGU`+)vo3fN=skoqW*|@@T+QnVO|p(c=8&hW z-Sj4Q9JvjH?Vmf(oSrPo&AW{FRTz$M;+`E?6`-we9~8naCt7OeoOfdY8o5{?TRRQ? zbnCLk>S|i|5QcnSmWp|wc=o&}BAXxquxmz9y6$2RHYIXF&YK;ruitF>gm7c6+3D#M zIQ9mvY%6dx-EA1$_~?`6S)@dB5%e7Qk+FA`NYCGaaK#$_aIvlQj}J9F-cZxgQwI zIMoYasooErhRrpZhx79oH_vn1udA_}j`oy04|zciI-YP}*mMvQ_rN_t|I;Lc@A$#H zw!fk^sCuu)b3|ENmcjTxJ*x!m*EV|@S>nEnB3}mJf=-?tYxgMUka&3SnU_QXQGj0i zp=Oh`_K9}Zx(oitY<6E7k9&<=e;wr*OqWvI&14Zz(|5rRyBhXRn?&xBfJVRH`z{PY zh5-z%=vyWSr5o0q_q89s)ig~F+g@z37C9GL@GJ5`%q$$D(gCLNMe`Bz)?`%yfAjmu zI&tn9Mb?&G@MB(!(#BuM46d-t_>VnhsbW;BDgG&L+knT(1g$I<plZU_d^Sh|s`8>A&Q_Grp59q1W`>=-~tHp#P9;aGH zz)UV^Y1yTQ17^}AhKJ4$9zvoYbn&ss{CYxr5bPg@@c*&*-ce0;O&_QQK|nx3K|w&J ztAHX%FQW7k5C!R=fYOmFC4?e&I?_WxN8ahHyYG{#O0_5%kJmy*N`o8=A zdDmU*`!j20pFL-0_UtLYnL{f81ZwlmR{Fh!<+sOf)8cw?p@C8fAkMp~?=facryrl~ zdf_W=h!pxQ=0!B94A>Xv!-0{uai)QhFQ5`W-l^6GqdaM2HlpEJu3a35QzlB_7v7vf zy0spQb7~Z`7CQLdn<&)F=20D2a0e9@>zE<5oJ7@C zP{gNp{RJ%!EW(fcjNskr+)j`0I1n*aXY!gt?)dZ0xFp8OELSd>a0phHsz+bePxAT| z24m1<k>@>#qWCrz;HH&2@OnMzUG?h^JBYn8I@ z>vH|PW8%4j#&&}bG|O~YE4m%`lX<(`_kddAu+paYw6wOEwIp{aS z5Hzf#P~kowJ`v4`8$^c|#-au_>Lv{mt&X@usz7g>+)mt|B`&$ccyIm4)(lQw-mC_wSfxPpZ)yU6c)Q9 zGxxJhO*a+?UuocQJYzZRl7W9WSZx1%D6Qrb$dne%IC>Ax=o|`y60*yPO_`1$YSc=^ z6&S;6lkaiDxBDoJ+HC*N0kN)gNHT^Kj_l9n+L4v8jSY!M{ z0{)RixaKLZA7{|+RP$(}uZbrZBRW{=at9@LtU7P)&^4})I~vAjN#q*D!R%hIuPo}v zJGbWG>nWp{$P80dTf=d1+o6tGtA?w9+m8E8vECivM7?q*Fg1y&s9%Pn@pi*erP-whUA7(oe<~-zr0$LgKjlSPmrT zv2>tsx@|O>vZ;CsW)0QLdQ#ugMg{H609VsKL*CA!yGP{L1=rN=iWO(J4q@(K>FzZR6y+gzQ);9h=Kw? zR>^PDP1(*kwar(pzEq%@_kK;jR(0TANib@II;ukE^~O-eYyoweN1jP%1xzquVSB=H z;R`yc2=;u^ls;sc?8|i5AX;`sMcy7e$x#0ZA1;h%+pZz1!JT{69`qNyUHn3=wly~A zQIP-?J@G5%sf^lvJrJ7kFrotVK~Cl8(fs4UC~bBh?^!o5e7rJ~9(6XV0=o89?W24h z?m_p6Yp+elaRqR9l*Wr(tdqRmBIz5TvvtJ9RVu9M#b`3+%y-INt5jWD&cCK_PW;ee zJLOJ8{>ZG}uvKbQSloWVLci>Ou+-A*{R(}Qa>rVdrNJ_Oz+!3m+T56(wajIYVYjVq ztCGq&EAfGW=^B<6N#YNd++t*}$B-MMv8W1sh)Y0gezR+{yEcWH_n5%&$%)~@ccPU& zl`fs?rkSjL*_!I6VojB{YUoDq>8#1-!cPfyBYd&sGaHmoyR$@TQZkMoxV&Ok3R`bhWnPuNxZ=GYD z&2HCBXA8XWj;<9AjrA!?fWAm)(`vUQ(KtZj7dH$#uFyzI9UEw^U`~Y zX^a)f5?HQGyX|t~iRXCfp#xZJ47vY46ggr`1$k;kqhgagx^q9wLI# zm}anPYGJUgHNz+{wMJ`mmnP%$2SJV=;FDI)ETu`t(-qYlBdWn@n%QGaN3$`XTBS5J zMQRViL#GnUmbMwHtl=V0@^qMJ&-g?bIgsaVYh~6vx3{-1t`?DI zy<&zDsWmgMnH=uI1ymKT$D!oJXLM#RVzJUl*0HgL2bPn$Lwqn>?=^LA!-_57HjnEa z4N*ODG+PIM!0}2EZSj-!Uv-r&s}K9|XweotW&#;LoJ=jfUOv+tS-njd;Pdy0%c^wC zzfs?7{1EZ%$oaV&Tamnwh+ZB-UqJ#Z<$l5ZrU)7Ep`Uq8i(C`&b(I7c_y?nnJM+6P zm#s_=bPo(k@U2Xb=jte)jWOUzN3rXoP2NK{!n!`~K_&_MN7$Iu3^f?XEFSuLjm74& zH8M%7bYi;6VkCK|U@B|UawXo)xm6r99;Nd`4J7!T@um|4&6VRVqAGBB6^+U4bqwS5 zJJya~WA8HISakS&>C(D)jKFpLJxrF0Xq?$tYAAnUT?_a$F}M2ZhiD0;tSd1C*XAJPSG9>b;3xoF;6ZJ1pPPF>-dG z%8-%YOQtkoMe4|xX;eHTPGrp&q~!uC~iy*mEmKalEzk=Y6apw zhCNNuXawePkV*L_=YnZ7zL4o`_3y>k7WM6si%FfrZST6r%*S)vd=P7u{mIML7y|o~ zzC6S2glvR&AS|WF;(L@9WIx9W?ehZfm&c;aA$JRgcN3_sJ+&XI@zpg8w;|R?hkP}w z))*bIRsmrM4I24Piu{QGU1+=KN>jvnPN!@p>O@_4)!{GGksUv}KSbWnGiimSm{p{m z1dddfTHJ}cBr@41kfDGMlXI6V&id)LaVOF0=aW&9&hM3>T7iDvYx6NTxTjL_pE^Bg zhCPTkua6`nlLt0(2yP?E0w&4wD9sKYUSYYb7WHNr?SXT(t?J0d`J!G^%Mwu$*5kP2 zxWT;8DNi~nF~M<_ADwFYl6=76uM9yXFuQA-X;+WmopWaIVl zaE@mU`48+1;7ZfW`Q_K7wK4}CN^8|QYy)Z~?*7@y;KpI|P@vf5Ad4l$i2M4ffP{q+ zh`g4aBXJ&W2?HDT;i(hWT|?Yq-QAj3vum(|Rm%n2s2FnDC8qj2=xbJq=XEj?BNnmM z%Xhx|%2usCoyI52u;#$%rz?C>S7B#zrLGn&Eu0%$S*=Nt_-KXBf<=!(?lH`lzssGH z@??+uc3s9YZ~|&Beu3;?u5VRTM4)poA24)T!JTb1*)YdDS5kx3);=gw?H(|_R7Rb= zGrDLmGL8@(5m-Uh<$c#qXIuNY;64qb2`Ox*D0muOa@D zPXEZe%r;7%P=>ib^8+7VR~3`L0{~C~kl46jYf{OhIoVNJ!>iAPojI2xQtK|4m&k?@;*0}dq(RvOFD{07ZraIaJuA!E*0>%^tctzdegt%h|7Y!f-@i)@M@RQL!}%m4K-}i z%pj9Ip^0IfxaglWI6R!RBqgX7d+9*jjMr=%zm_W8X0k}2c1?Gp`hwCe{^VNrZPrdd zQ*p%e<%%7@gWD|(UkT1Tv`WT53{+*`Z>o!eOI`tW@4-v7Uyt^K2OJ2OQGMyV4Q~PU z?>{?ryaKp{oYNvqjobkAavj+?+a#>|s^iDoh0xy@wYz|_q-JJqbvEAtkyLA&V2F}} zKH9|d%;Q;=I};Bxpd)U%WsAGGo5;*dmy9UbujYg7Y19QM2O72b*kKDK6@S!(*j#w- z%K5D(UhNFB@zLm$9!EaNA6@UZzLTm0m{tYG4{2i5zP%WA4PS>_eS5q$oi-ruoWkM1 z3NOOb=Z5arm5!bpc?Edyt#`TM;bV|peeE)uBLtyqth6F-?iEWwMpqfg2g)KdcoVd* z{LNze3qeOj&?Q_&zzQsVpnJY3o>hY0rf7msl$3l++4p=4b;a5Cix{BTtP3Tedu@ig zRLj8WQq`!dOa!k}8BotgT4}eJwqs8i40^Ml2M1JtGlJ5q&6Eu$FTtj2WMj*VM*+QT zO1DWFXyxiXdLt3+x8+InE`sp1S`en9!j%h_jv8DOi53L(=6vB3Ann?*Pj9)G_z4od zKgb|@@4f9ZdJO0_dRzDDGobgAN&P9(%B_8RYY5NI?w30tdUYUrrN-;;mVtXZS}np= zl^(dXoHCklIXp@ORu6vmjfT5*I}sc{TQJ4y+r*n(#kjciSJRC7dii;R~4c+=X1S!KhU&j zWE9!!6M$Y&dn55TQ(>Rp-$<1>61}fZK=i7YiPf4m*b;bf;^5u}wbp_DU9`3coHz`iW=-OI`V8Rzb<$pO+|1olFX;dIGYl_W~; z?5ctYywrUe$TL-Rg31$68%9C@oTT38%=WaX?ZZE)Fz{44UnnA7x5ZKxsgMM;XEw*zyO+2??e%u25l=RFPkqn6mw#=CpP%5a58_=@evhOba_6!kspK3n zLob2%MCN_5I0>>87F`_adqpm2=NBe>n|5F+j7WNW?#yoJeO`l42$0*%`E~Ubgm2Pz z5P0@?(~*yR@?@>9tq177e=1}OyCtoYPha0P0;!Sj4P|DrfLxH_Aek|_p6nPHjCeuT2dg<3^k@q}+y{d}6*kpk+!f;r&t2eDVqU0)*^Y)Yp4{=1xGgW1NM|DsL+vU%Gxu1u<0SCG7`TV`Jt=wrzLmQ z6R`A+9=yxW0jPZcd-Mp2KS%b(`B`<`i6rFsQ;-4s^j3%C2#?l1j#I2__dCOnuQ6Xh zkXAkhMh?0~jpi8__rOumy8?hH;Ll@GPDDCHZ%gQ>CQd+a+&Pth@o-_E-Yt9OgCvGG zazgZ~D{#fdQUQ9czjqlF1A2>?(UqiKzwguAH!vVliwN;=oK ze$pe3a^6c$O*I}E3{h$N6__u;1x&6UT^#9Py?E(&X^s%<6dwE!EHH@D6+f)QJgt%Z zvAULwdWK3eE|v7k$1@N5gYqKokz-`>>I3I7WtSW^b%IP!_st2C9PghSxlNEEH?lY{ z4{nnazaw0C4y|y@_4V~NC2BoHUF5tMTf?eEQY22(&+Zpu(Ub}jV}E|#1f{!Yk4+w7 z>&o2gS^lb(T+tCDTddyT>lq~o{$gNy8`OnuW9B=H3_a!uS73}i*J!K{x}PQ4-Y}zs z$dJs`Au`IAZ!8~_LX~IoIW$j3uU0X1-{K~{(Z$OnHiYUg>PEQ%K+`Y1Xi0abo~j?s zHLg&r^3+Rt$yD$!6R)*&Na8A@f|9YgnC<0ubk`VfVn#I-1xuzjq@%raJOxvokR#H*JeF?xPV|h+KR}gG3QuDwK ze5iQz^kZ(d$+Y^%up^`e{sv4_S8jX>S#`%KGg^Z@xG zlVCZQlZ|hiypEcp;CE9(S;``#nPZdMr|-c=Z5XZ2(?$px1?_sP$8j?m0y4xC^Mt`Mv zfYcvY%g<#K`Uidr92|y&dca}$b%EssvPIU%mNj#$iw@~&->p4k<;fYMc=mE~{VfY{ zGjpVJ{gMX}5bv$m4@mEBv+siz`8>bvPGX-t6gx59W(#qH`N^etyG7TZ#e|2|+oWre zHa)TLq6fUCi27^hUwBDm2uPv+dw0RfQBw97yELEtvW?1gLiPF4jI5+(2X zAZIXM#z@i&T$vp#EREZ)|;|v;kt}< z<>btf=lci04y>HT-ontFO%+n0cg`GgwHXvOA9n)P%kck`F9D_B>X6waCYA!&AILR> zr1B-_e+iQn+Os?S*Za4S6Uk?t8+jMJC+PbjMd)&$nf3yAQ{$X}xf)@2A*u8n`iSua z@7bznE<^>~WufWt+oV6;+6yiTQ~1NVBxfS*f58rkGLigIr+a%b1ufRhg7xq5PJXu= za#4Nxeo+8~T))SRuBZcYubkTN1>4=DeP0!jGr{~MDIa|b0{UvYCegtN07Skb?uK(! znNkMBHtI#;5K98~zI7U5?gj{rd(z&yXQ8}^U+u-ehXQhicF~Kd^h5ps@~-6MAoiZC$l-<> zunt}7{(hk&eB}Oz@P{NFwb|3$YGx1eUXr|=Kz?Sm>UHjzI06V}!|<`iQ=kpEUZ{1F z$bAX&Qcy_o&Ow|i@bA$+o&p{1qpx9|SC0d9b)f1w>I<%%PD~_$o(n_m#otTWY9XW` z8lqLYD9R4(*N|)aP*q7O;M!dU#eW@&%X=Z|MJ%TgDTny^48)#Rvxts&KyMkp|4!PllU3T3%{|W{V?Tgba z-T9yHFK~ofpp%`~-?_K>R6X ziKv0jS@c9*za^9iR1f1M@i6SkKD|5F)BH#bx73MUCm_w~S0ln7W!}v)n`}VR`GVUcbXGmgskp$lKJNPFqt zTg~6r6n<0kD=qao}v9r>H^R~k!H)v;#PIwt{U3bR~E0G6_i!yp<-SR9W2LR;# zG*?3fp7#VeL1CQ!+7ByLHWP(aR_%OLi}SpARTNUey*-i)Ufi2Pzrpz+xG|_d|8AcG zHuyzrbkqsCk-PqE+lmb@bQ}v<3|1YZ_?zZ^-FR%pk0_!x7;&=q%cULKexNOvB4o#< z>Lio#VOc_}vmOJXN(mlKuaq2?-0yBZMAb%G{A~89yC8T