47 Commits

Author SHA1 Message Date
idk
9d547d3af1 remove old make targets 2020-08-04 00:58:54 -04:00
idk
c76a3fc3c9 update README some more 2020-08-04 00:50:22 -04:00
idk
925c75e503 update fmt, and asset target 2020-08-04 00:31:35 -04:00
idk
00fcecd433 update fmt, and asset target 2020-08-04 00:31:08 -04:00
idk
9e083993f9 detail the installation a bit. 2020-08-04 00:25:47 -04:00
idk
b5ceecfbbe Start making a little more of this re-usable 2020-08-04 00:15:41 -04:00
idk
dc064d7bbc Start making a little more of this re-usable 2020-08-03 23:42:02 -04:00
idk
634a9381b6 make the name inaccurate 2020-08-02 19:25:22 -04:00
idk
0aa9d29596 make the name inaccurate 2020-08-02 18:21:36 -04:00
idk
d4774e5f48 lots and lots of rounding off rough edges 2020-08-02 03:08:56 -04:00
idk
ea92df5139 move httptunnel.go 2020-08-01 14:15:43 -04:00
idk
ebab97391b update the go modules 2020-07-29 13:56:43 -04:00
idk
05c0b208b2 update the go modules 2020-07-29 13:05:05 -04:00
idk
33b84b37fd switch it to i2p-zero and sam-forwarder-httptunnel for embedded behavior 2020-07-29 10:39:24 -04:00
idk
641c43e18f do more of the things in the generate phase 2020-07-03 02:29:15 -04:00
idk
ae02786a6d Strip time data from extensions 2020-07-02 19:58:19 -04:00
idk
bab594b946 add another user.js setting 2020-07-02 18:30:40 -04:00
idk
76ce876a7a fmt 2020-07-02 18:25:06 -04:00
idk
7c44e83cc7 fetch extension during go generate phase 2020-07-02 18:24:46 -04:00
idk
b6ed42d1b4 make it use an embedded browser 2020-07-02 17:38:58 -04:00
idk
36862ac93c add some info to the readme 2020-06-16 21:02:26 -04:00
idk
156496b844 remove the git module 2020-06-16 15:42:37 -04:00
idk
2d8f59cba5 Improve the startup flow 2020-05-17 17:45:50 -04:00
idk
0ea5620a12 embed an i2p router because I can do that now 2020-05-16 21:55:29 -04:00
idk
a031e0c8d8 embed an i2p router because I can do that now 2020-05-16 21:54:10 -04:00
idk
288391fe7f filter-branch 2020-05-11 20:13:30 -04:00
idk
9a3975e701 update 2020-05-11 20:07:45 -04:00
idk
c90dab0c24 update 2020-05-11 20:06:57 -04:00
idk
c082625327 add noscript to primary variant build 2020-04-07 22:30:48 -04:00
idk
aae39fb032 add noscript to primary variant build 2020-04-07 22:21:42 -04:00
idk
559ff8d6a1 add noscript to primary variant build 2020-04-07 22:21:26 -04:00
idk
7178a36457 update variant builds 2020-04-07 21:31:10 -04:00
idk
bb4f06c1ab update variant builds 2020-04-07 21:30:26 -04:00
idk
ed8830d6e1 update variant builds 2020-04-07 21:27:27 -04:00
idk
92e041c09b update variant builds 2020-04-07 20:50:40 -04:00
idk
719644d70d update variant builds 2020-04-07 20:47:29 -04:00
idk
d00032b4f5 update variant builds 2020-04-07 20:45:19 -04:00
idk
cf1ea06e17 update README.md 2020-04-07 20:23:31 -04:00
idk
4f6f36d7e1 update README.md 2020-04-07 20:18:28 -04:00
idk
5bde61e309 update README.md 2020-04-07 20:16:41 -04:00
idk
400c385f2e Futz with the possibility of a pure-go JVM 2020-04-05 18:30:30 -04:00
idk
eb16fa5dfc Futz with the possibility of a pure-go JVM 2020-04-05 15:50:18 -04:00
idk
cd09f62554 note to self about embedding a router inside the launcher 2020-04-05 15:19:42 -04:00
idk
51d394a1dc note to self about embedding a router inside the launcher 2020-04-05 15:03:24 -04:00
idk
f46a33f961 note to self about embedding a router inside the launcher 2020-04-05 14:56:46 -04:00
idk
1f13b8ed33 note to self about embedding a router inside the launcher 2020-04-05 14:54:49 -04:00
idk
639fa37561 update README.md 2020-04-03 21:32:54 -04:00
19 changed files with 1456 additions and 140 deletions

13
.gitignore vendored
View File

@@ -1,6 +1,15 @@
i2pfirefox
i2pfox
ifox
i2p-fox
i2pfirefox.exe
i2pfirefox-darwin
i2pfirefox-variant
i2pfirefox-variant.exe
i2pfirefox-variant-darwin
firefox/*
i2p-zero/*
*.tar.bz2
i2pd.conf
i2pd/
i2pd.tar.gz
tunnels.conf
.i2cp.conf

129
Makefile
View File

@@ -6,61 +6,104 @@ VERSION=0.73
SNOW_VERSION=0.2.2
UMAT_VERSION=1.25.2
UBLO_VERSION=1.4.0
LAUNCH_VERSION=$(VERSION).04
NOSS_VERSION=11.0.23
ZERO_VERSION=v1.16
LAUNCH_VERSION=$(VERSION).092
build: setup assets.go
go build
GO_COMPILER_OPTS = -a -tags netgo -ldflags '-w -extldflags "-static"'
assets: clean setup assets.go
build:
go build $(GO_COMPILER_OPTS)
assets.go:
go run -tags generate gen.go
assets: fmt lib/assets.go
clean:
rm -rf ifox i2pfirefox* assets.go i2pfox i2p-fox
gen:
go run $(GO_COMPILER_OPTS) -tags generate gen.go extensions.go
clean: fmt
rm -f i2pfirefox*
fmt:
gofmt -w -s *.go
gofmt -w -s \
lib/firefox.go \
lib/pure.go \
lib/pureextensions.go \
lib/variant.go \
lib/variantextensions.go
setup: i2ppb snowflake ublock umatrix
i2ppb: ifox/i2ppb@eyedeekay.github.io.xpi
snowflake: ifox/snowflake@torproject.org.xpi
ublock: ifox/uBlock0@raymondhill.net.xpi
umatrix: ifox/uMatrix@raymondhill.net.xpi
ifox:
mkdir -p ifox
ifox/i2ppb@eyedeekay.github.io.xpi: ifox
wget -c -O ifox/i2ppb@eyedeekay.github.io.xpi https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/$(VERSION)/i2ppb@eyedeekay.github.io.xpi
ifox/snowflake@torproject.org.xpi: ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi
ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi: ifox
wget -c -O 'ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi' https://addons.mozilla.org/firefox/downloads/file/3519836/snowflake-0.2.2-fx.xpi
ifox/uBlock0@raymondhill.net.xpi: ifox
wget -c -O ifox/uBlock0@raymondhill.net.xpi https://addons.mozilla.org/firefox/downloads/file/3521827/ublock_origin-$(UBLO_VERSION)-an+fx.xpi
ifox/uMatrix@raymondhill.net.xpi: ifox
wget -c -O ifox/uMatrix@raymondhill.net.xpi https://addons.mozilla.org/firefox/downloads/file/3396815/umatrix-$(UMAT_VERSION)-an+fx.xpi
sums: setup
sum:
sha256sum ifox/i2ppb@eyedeekay.github.io.xpi
sha256sum 'ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi'
sha256sum ifox/uBlock0@raymondhill.net.xpi
sha256sum ifox/uMatrix@raymondhill.net.xpi
#sha256sum 'ifox/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi'
all: setup assets.go
GOOS=windows go build -o i2pfirefox.exe
GOOS=darwin go build -o i2pfirefox-darwin
GOOS=linux go build -o i2pfirefox
all: pure variant
pure: fmt lib/assets.go windows osx linux
windows: fmt
GOOS=windows go build $(GO_COMPILER_OPTS) -o i2pfirefox.exe
osx: fmt
GOOS=darwin go build $(GO_COMPILER_OPTS) -o i2pfirefox-darwin
linux: fmt
GOOS=linux go build $(GO_COMPILER_OPTS) -o i2pfirefox
variant: fmt assets.go vwindows vosx vlinux
vwindows: fmt
GOOS=windows go build $(GO_COMPILER_OPTS) -tags variant -o i2pfirefox-variant.exe
vosx: fmt
GOOS=darwin go build $(GO_COMPILER_OPTS) -tags variant -o i2pfirefox-variant-darwin
vlinux: fmt
GOOS=linux go build $(GO_COMPILER_OPTS) -tags variant -o i2pfirefox-variant
sumwindows=`sha256sum i2pfirefox.exe`
sumlinux=`sha256sum i2pfirefox`
sumdarwin=`sha256sum i2pfirefox-darwin`
sumvwindows=`sha256sum i2pfirefox-variant.exe`
sumvlinux=`sha256sum i2pfirefox-variant`
sumvdarwin=`sha256sum i2pfirefox-variant-darwin`
check:
echo "$(sumwindows)"
echo "$(sumlinux)"
echo "$(sumdarwin)"
echo "$(sumvwindows)"
echo "$(sumvlinux)"
echo "$(sumvdarwin)"
release:
gothub release -p -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "Launchers" -d "A self-configuring launcher for mixed I2P and clearnet Browsing with Firefox"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "i2pfirefox.exe" -f "i2pfirefox.exe"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "i2pfirefox-darwin" -f "i2pfirefox-darwin"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "i2pfirefox" -f "i2pfirefox"
linux-release:
gothub release -p -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "Launchers" -d "A self-configuring launcher for mixed I2P and clearnet Browsing with Firefox"; true
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -n "i2pfirefox" -f "i2pfirefox"
upload:
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumwindows)" -n "i2pfirefox.exe" -f "i2pfirefox.exe"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumdarwin)" -n "i2pfirefox-darwin" -f "i2pfirefox-darwin"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumlinux)" -n "i2pfirefox" -f "i2pfirefox"
upload-variant:
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumvwindows)" -n "i2pfirefox-variant.exe" -f "i2pfirefox-variant.exe"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumvdarwin)" -n "i2pfirefox-variant-darwin" -f "i2pfirefox-variant-darwin"
gothub upload -R -u eyedeekay -r "i2pfirefox" -t $(LAUNCH_VERSION) -l "$(sumvlinux)" -n "i2pfirefox-variant" -f "i2pfirefox-variant"
upload-all: upload upload-variant
release-all: release upload-all
release-pure:
make pure
make release; true
make upload
release-variant:
make variant
make release; true
make upload-variant
clean-release: clean release-pure release-variant

View File

@@ -1,7 +1,65 @@
I2P Profile Configuring Launcher for Firefox, Multiplatform
===========================================================
Configures a Firefox profile in the working directory with extensions and
configuration settings for I2P. At this time, it is configured for mixed I2P
and clearnet browsing via my browser plugin. In the near future, other plugins
may be configured as well as additional settings in user.js
Configures a Firefox profile for use with I2P Sites, I2P applications, and
I2P configuration. Provides a bundled I2P Router and a pre-configured
browser. Notably, it is completely compatible with any pre-installed router
while also not requiring a pre-installed I2P router, which means that it
can be used as a one-click introduction to I2P use for beginners while *also*
being a convenient, automatic way to configure I2P Browsing for I2P users
who have been around for years. It is a project to minimize I2P browsing
misconfiguration and explore options to improve our response to various
threat models, in a way similar to Tor Browser did but with the ability to
fulfill I2P's specific needs.
If you're a beginner, who uses this and is interested in learning more about
I2P, I advise you to install a fully-featured I2P router by following my
detailed install guide here: https://github.com/eyedeekay/Install-Java-And-I2P-on-Windows.
Installation
------------
This is very experimental software right now. Use it at your own
risk.
It should 'just work' if you download the executable from the releases page
and double-click it, but expect some rough still, especially on Windows. I
would advise you to check the sha256sum against the sha256sum in the release
description.
```Bash
# Linux
wget -O i2pfirefox-darwin https://github.com/eyedeekay/i2pfirefox/releases/download/0.73.091/i2pfirefox
# Windows
wget -O i2pfirefox-darwin https://github.com/eyedeekay/i2pfirefox/releases/download/0.73.091/i2pfirefox.exe
# OSX
wget -O i2pfirefox-darwin https://github.com/eyedeekay/i2pfirefox/releases/download/0.73.091/i2pfirefox-darwin
```
Go developers with at least go 1.14 installed can build it from source with:
```Go
go get -u github.com/eyedeekay/i2pfirefox
```
What things does it do?
-----------------------
- It manages a Firefox profile, and a whole Firefox browser on Linux. It falls back to Chrome if Firefox is not
available.
- It makes sure an I2P router is ready to work for I2P browsing, including launching an embedded I2P Zero router if an I2P router is
not available to start.
- It installs browser extensions in Firefox.
- It embeds its own HTTP Proxy for browsing inside I2P
- Easily integrate Go and Webassembly based web applications as well enhance Java I2P apps
It *can eventually*
-------------------
- Also browse Tor, use Tor as an outproxy
- Embed web applications(Like webtorrent, webIRC), under human-readable domain-like aliases
- Bring along TLS certificates for those domain-like aliases
- Update itself via bittorrent

7
chromium.go Normal file
View File

@@ -0,0 +1,7 @@
package main
import "github.com/eyedeekay/I2P-Configuration-for-Chromium/lib"
func chromiumMain() {
i2pchrome.ChromiumMain()
}

9
extensions.go Normal file
View File

@@ -0,0 +1,9 @@
//+build generate
package main
var VERSION = "0.75"
var SNOW_VERSION = "0.2.2"
var UMAT_VERSION = "1.25.2"
var UBLO_VERSION = "1.4.0"
var NOSS_VERSION = "11.0.23"

7
firefox.go Normal file
View File

@@ -0,0 +1,7 @@
package main
import "github.com/eyedeekay/i2pfirefox/lib"
func firefoxMain() {
i2pfirefox.FirefoxMain()
}

237
gen.go
View File

@@ -2,10 +2,243 @@
package main
import "github.com/zserge/lorca"
import (
"crypto/sha256"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"os"
//"os/exec"
"time"
"github.com/zserge/lorca"
)
var x = `<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC140.CRT" version="1.0.0.0"></assemblyIdentity>
</dependentAssembly>
</dependency>`
var manifest = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns:asm.v3="urn:schemas-microsoft-com:asm.v3" xmlns="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
<assemblyIdentity
version="0.0.0.1"
name="i2pfirefox.exe"
type="win32"/>
<description>I2P Browsing Bundle</description>
</assembly>
`
var pureExtensions = `// +build !variant
package main
var EXTENSIONS = []string{
"i2ppb@eyedeekay.github.io.xpi",
"uBlock0@raymondhill.net.xpi",
"uMatrix@raymondhill.net.xpi",
}
var EXTENSIONHASHES = []string{
`
var variantExtensions = `// +build variant
package main
var NOM = "variant"
var EXTENSIONS = []string{
"i2ppb@eyedeekay.github.io.xpi",
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
"uBlock0@raymondhill.net.xpi",
"uMatrix@raymondhill.net.xpi",
}
var EXTENSIONHASHES = []string{
`
var i2ppbHash = ""
var snowflakeHash = ""
var ublockHash = ""
var umatrixHash = ""
var i2ppb = []string{
"i2ppb@eyedeekay.github.io.xpi",
"https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/releases/download/",
VERSION,
}
var snowflake = []string{
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
"https://addons.mozilla.org/firefox/downloads/file/3519836/",
SNOW_VERSION,
"snowflake",
}
var noscript = []string{
"{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi",
"https://addons.mozilla.org/firefox/downloads/file/3534184/",
NOSS_VERSION,
"noscript_security_suite",
}
var umatrix = []string{
"uMatrix@raymondhill.net.xpi",
"https://addons.mozilla.org/firefox/downloads/file/3396815/",
UMAT_VERSION,
"umatrix",
}
var ublock = []string{
"uBlock0@raymondhill.net.xpi",
"https://addons.mozilla.org/firefox/downloads/file/3521827/",
UBLO_VERSION,
"ublock",
}
func variantFile() error {
value := variantExtensions
value += "\t\"" + i2ppbHash + "\",\n"
value += "\t\"" + snowflakeHash + "\",\n"
value += "\t\"" + ublockHash + "\",\n"
value += "\t\"" + umatrixHash + "\",\n"
value += "}\n"
return ioutil.WriteFile("variantextensions.go", []byte(value), 0644)
}
func pureFile() error {
value := pureExtensions
value += "\t\"" + i2ppbHash + "\",\n"
value += "\t\"" + ublockHash + "\",\n"
value += "\t\"" + umatrixHash + "\",\n"
value += "}\n"
return ioutil.WriteFile("pureextensions.go", []byte(value), 0644)
}
func sha256sum(path string) (string, error) {
bytes, err := ioutil.ReadFile("ifox/" + path)
if err != nil {
return "", err
}
sum := sha256.Sum256(bytes)
var s []byte
for _, c := range sum {
s = append(s, c)
}
log.Println(fmt.Sprintf("%x", sum))
return fmt.Sprintf("%x", sum), nil
}
func fetch() error {
if err := get(i2ppb); err != nil {
return err
}
if tmp, err := sha256sum(i2ppb[0]); err != nil {
return err
} else {
i2ppbHash = tmp
}
if err := get(snowflake); err != nil {
return err
}
if tmp, err := sha256sum(snowflake[0]); err != nil {
return err
} else {
snowflakeHash = tmp
}
/*
// if err := get(noscript); err != nil {
// return err
// }
// if tmp, err := sha256sum(noscript[0]); err != nil {
// return err
// }else{
// i2ppbHash = tmp
// }
*/
if err := get(umatrix); err != nil {
return err
}
if tmp, err := sha256sum(umatrix[0]); err != nil {
return err
} else {
umatrixHash = tmp
}
if err := get(ublock); err != nil {
return err
}
if tmp, err := sha256sum(ublock[0]); err != nil {
return err
} else {
ublockHash = tmp
}
return nil
}
func determinate(path string) error {
t := time.Date(1970, time.January, 1, 1, 0, 0, 0, time.UTC)
if err := os.Chtimes("ifox/"+path, t, t); err != nil {
return err
}
return nil
}
func download(path string, url string) error {
if _, err := os.Stat("ifox/" + path); os.IsNotExist(err) {
os.MkdirAll("ifox", 0755)
log.Println("fetching", path, "from", url)
// Get the data
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
// Create the file
out, err := os.Create("ifox/" + path)
if err != nil {
return err
}
defer out.Close()
// Write the body to file
_, err = io.Copy(out, resp.Body)
return err
}
return nil
}
func get(extension []string) error {
if len(extension) == 3 {
path := extension[1] + extension[2] + "/" + extension[0]
err := download(extension[0], path)
if err != nil {
return err
}
return determinate(extension[0])
} else if len(extension) == 4 {
path := extension[1] + extension[3] + extension[2] + "-an+fx.xpi"
err := download(extension[0], path)
if err != nil {
return err
}
return determinate(extension[0])
}
return fmt.Errorf("Error fetching extension for build.")
}
func main() {
//os.RemoveAll("ifox")
//ioutil.WriteFile("i2pfirefox.manifest", []byte(manifest), 0644)
//if err := exec.Command("rsrc", "-manifest", "i2pfirefox.manifest", "-o", "rsrc.syso").Run(); err != nil {
//log.Fatal(err)
//}
if err := fetch(); err != nil {
log.Fatal(err)
}
if err := pureFile(); err != nil {
log.Fatal(err)
}
if err := variantFile(); err != nil {
log.Fatal(err)
}
// You can also run "npm build" or webpack here, or compress assets, or
// generate manifests, or do other preparations for your assets.
lorca.Embed("main", "assets.go", "ifox/")
lorca.Embed("i2pfirefox", "lib/assets.go", "ifox/")
}

16
go.mod
View File

@@ -3,7 +3,19 @@ module github.com/eyedeekay/i2pfirefox
go 1.14
require (
github.com/eyedeekay/checki2cp v0.0.12
github.com/eyedeekay/go-fpw v0.0.01
github.com/akavel/rsrc v0.9.0 // indirect
github.com/eyedeekay/GingerShrew v0.0.0-20200702210346-bb2ed34c11fb
github.com/eyedeekay/I2P-Configuration-for-Chromium v0.0.0-20200802063209-8973270c836e
github.com/eyedeekay/checki2cp v0.0.17
github.com/eyedeekay/go-ccw v0.0.0-20200403222455-d0e01222fd2a
github.com/eyedeekay/go-fpw v0.0.0-20200512022837-c8b4dcdc74d4
github.com/eyedeekay/httptunnel v0.0.0-20200116022455-631ab90f707d
github.com/eyedeekay/zerobundle v0.0.0-20200804040541-f28536b381d0
github.com/klauspost/compress v1.10.10 // indirect
github.com/klauspost/pgzip v1.2.4 // indirect
github.com/pierrec/lz4/v3 v3.3.2 // indirect
github.com/zserge/lorca v0.1.9
golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect
)
replace github.com/zserge/lorca => github.com/eyedeekay/lorca v0.1.9-0.20200403221704-ea2ffcadfc1b

545
go.sum
View File

@@ -1,13 +1,558 @@
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
cloud.google.com/go v0.16.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
code.cloudfoundry.org/bytefmt v0.0.0-20190710193110-1eb035ffe2b6/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
crawshaw.io/littleboss v0.0.0-20190317185602-8957d0aedcce/go.mod h1:TIbCAHgttUfOKudw59Il7Z0XIlitzo228/mtwMe4vPM=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI=
github.com/RoaringBitmap/roaring v0.4.18/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI=
github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/akavel/rsrc v0.9.0 h1:HwUDC0+tMFWqN4D5G+o5siGD4oVsC3jn6zM8ocjc3nY=
github.com/akavel/rsrc v0.9.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alexflint/go-arg v1.1.0/go.mod h1:3Rj4baqzWaGGmZA2+bVTV8zQOZEjBQAPBnL5xLT+ftY=
github.com/alexflint/go-arg v1.2.0/go.mod h1:3Rj4baqzWaGGmZA2+bVTV8zQOZEjBQAPBnL5xLT+ftY=
github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw=
github.com/anacrolix/dht v0.0.0-20180412060941-24cbf25b72a4/go.mod h1:hQfX2BrtuQsLQMYQwsypFAab/GvHg8qxwVi4OJdR1WI=
github.com/anacrolix/dht/v2 v2.0.1/go.mod h1:GbTT8BaEtfqab/LPd5tY41f3GvYeii3mmDUK300Ycyo=
github.com/anacrolix/dht/v2 v2.2.1-0.20191103020011-1dba080fb358/go.mod h1:d7ARx3WpELh9uOEEr0+8wvQeVTOkPse4UU6dKpv4q0E=
github.com/anacrolix/dht/v2 v2.3.2-0.20200103043204-8dce00767ebd/go.mod h1:cgjKyErDnKS6Mej5D1fEqBKg3KwFF2kpFZJp3L6/fGI=
github.com/anacrolix/dht/v2 v2.5.1-0.20200317023935-129f05e9b752/go.mod h1:7RLvyOjm+ZPA7vgFRP+1eRjFzrh27p/nF0VCk5LcjoU=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/envpprof v1.0.1/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4=
github.com/anacrolix/envpprof v1.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4=
github.com/anacrolix/go-libutp v0.0.0-20180522111405-6baeb806518d/go.mod h1:beQSaSxwH2d9Eeu5ijrEnHei5Qhk+J6cDm1QkWFru4E=
github.com/anacrolix/go-libutp v1.0.2/go.mod h1:uIH0A72V++j0D1nnmTjjZUiH/ujPkFxYWkxQ02+7S0U=
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.3.1-0.20190913000754-831e4ffe0174/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.3.1-0.20191001111012-13cede988bcd/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.4.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.5.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.7.0/go.mod h1:s5yBP/j046fm9odtUTbHOfDUq/zh1W8OkPpJtnX0oQI=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff/go.mod h1:b0p+7cn+rWMIphK1gDH2hrDuwGOcbB6V4VXeSsEfHVk=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/missinggo v0.2.1-0.20190310234110-9fbdc9f242a8/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
github.com/anacrolix/missinggo v1.1.0/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
github.com/anacrolix/missinggo v1.1.2-0.20190815015349-b888af804467/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
github.com/anacrolix/missinggo v1.2.1/go.mod h1:J5cMhif8jPmFoC3+Uvob3OXXNIhOUikzMt+uUjeM21Y=
github.com/anacrolix/missinggo/perf v1.0.0/go.mod h1:ljAFWkBuzkO12MQclXzZrosP5urunoLS0Cbvb4V0uMQ=
github.com/anacrolix/missinggo/v2 v2.2.0/go.mod h1:o0jgJoYOyaoYQ4E2ZMISVa9c88BbUBVQQW4QeRkNCGY=
github.com/anacrolix/missinggo/v2 v2.2.1-0.20191103010835-12360f38ced0/go.mod h1:ZzG3/cc3t+5zcYWAgYrJW0MBsSwNwOkTlNquBbP51Bc=
github.com/anacrolix/missinggo/v2 v2.3.0/go.mod h1:ZzG3/cc3t+5zcYWAgYrJW0MBsSwNwOkTlNquBbP51Bc=
github.com/anacrolix/missinggo/v2 v2.3.1/go.mod h1:3XNH0OEmyMUZuvXmYdl+FDfXd0vvSZhvOLy8CFx8tLg=
github.com/anacrolix/missinggo/v2 v2.4.1-0.20200227072623-f02f6484f997/go.mod h1:KY+ij+mWvwGuqSuecLjjPv5LFw5ICUc1UvRems3VAZE=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc=
github.com/anacrolix/multiless v0.0.0-20191223025854-070b7994e841/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4=
github.com/anacrolix/stm v0.1.0/go.mod h1:ZKz7e7ERWvP0KgL7WXfRjBXHNRhlVRlbBQecqFtPq+A=
github.com/anacrolix/stm v0.1.1-0.20191106051447-e749ba3531cf/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg=
github.com/anacrolix/stm v0.2.0/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg=
github.com/anacrolix/sync v0.0.0-20171108081538-eee974e4f8c1/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk=
github.com/anacrolix/sync v0.2.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180803105420-3a8ff5428f76/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.0.1/go.mod h1:gb0fiMQ02qU1djCSqaxGmruMvZGrMwSReidMB0zjdxo=
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb/go.mod h1:3vcFVxgOASslNXHdivT8spyMRBanMCenHRpe0u5vpBs=
github.com/anacrolix/torrent v1.7.1/go.mod h1:uvOcdpOjjrAq3uMP/u1Ide35f6MJ/o8kMnFG8LV3y6g=
github.com/anacrolix/torrent v1.9.0/go.mod h1:jJJ6lsd2LD1eLHkUwFOhy7I0FcLYH0tHKw2K7ZYMHCs=
github.com/anacrolix/torrent v1.11.0/go.mod h1:FwBai7SyOFlflvfEOaM88ag/jjcBWxTOqD6dVU/lKKA=
github.com/anacrolix/torrent v1.15.2/go.mod h1:sJtcAZtlGaZLo7wCXT/EZV+hATsq0Bg6pVhhzACY0E0=
github.com/anacrolix/upnp v0.1.1/go.mod h1:LXsbsp5h+WGN7YR+0A7iVXm5BL1LYryDev1zuJMWYQo=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk=
github.com/andybalholm/brotli v0.0.0-20190621154722-5f990b63d2d6/go.mod h1:+lx6/Aqd1kLJ1GQfkvOnaZ1WGmLpMpbprPuIOOZX30U=
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/benbjohnson/immutable v0.2.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/boreq/friendlyhash v0.0.0-20190522010448-1ca64b3ca69e h1:2q8XPjAYhXX8H71AoAPdgBrCUA3HPhC4ax8XHrTsY6I=
github.com/boreq/friendlyhash v0.0.0-20190522010448-1ca64b3ca69e/go.mod h1:y80zLCg0QS5u3fJKeF2rwpezcyZuCpZpbFcWv6Pn98w=
github.com/bradfitz/gomemcache v0.0.0-20170208213004-1952afaa557d/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/d5/tengo v1.24.3/go.mod h1:VhLq8Q2QFhCIJO3NhvM934qOThykMqJi9y9Siqd1ocQ=
github.com/danfragoso/thdwb v0.0.0-20191106005607-18cfeb88e782/go.mod h1:IXu355OpbfEz78+tgu81vte3YA/MEWQKBu/dXod4NM0=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/elliotchance/orderedmap v1.2.0/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw=
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/eyedeekay/GingerShrew v0.0.0-20200702210346-bb2ed34c11fb h1:tUfxSHBVabVBpX0Rcupybxr7pBfG2E+p3N7EX4p9sc0=
github.com/eyedeekay/GingerShrew v0.0.0-20200702210346-bb2ed34c11fb/go.mod h1:PY7znvZ1ZF1QG5/4j9u769EX49l49z2rCdE0o4z8fMw=
github.com/eyedeekay/I2P-Configuration-for-Chromium v0.0.0-20200802060059-8ed0bfff2fe9 h1:TPJAkbZebNUAoSLhhGKOI1u8y3R7f1yeLvcwgSohp/M=
github.com/eyedeekay/I2P-Configuration-for-Chromium v0.0.0-20200802060059-8ed0bfff2fe9/go.mod h1:XchhjbeZKhEszN64SHavfaLGP2lFhWeO0ipH4cyBq5o=
github.com/eyedeekay/I2P-Configuration-for-Chromium v0.0.0-20200802063209-8973270c836e h1:oEoiXkil4L/ahtVlljDwz5LXbE1qBsJqvC3/utNrKe4=
github.com/eyedeekay/I2P-Configuration-for-Chromium v0.0.0-20200802063209-8973270c836e/go.mod h1:XchhjbeZKhEszN64SHavfaLGP2lFhWeO0ipH4cyBq5o=
github.com/eyedeekay/checki2cp v0.0.0-20200403213308-750ce7e6d81f h1:rpkO9pKHoNxoUAH2dY9gtIRt+vDCS3t2VUq5V7ZalXA=
github.com/eyedeekay/checki2cp v0.0.0-20200403213308-750ce7e6d81f/go.mod h1:ZilEsKkjp1K0e9qfUUdrHnz8teb1LU70L8JQzNSQmO8=
github.com/eyedeekay/checki2cp v0.0.12 h1:ytAlEx0w928H6pE4IPDVuRsRQjJ30wUjhR0sLIGlOH0=
github.com/eyedeekay/checki2cp v0.0.12/go.mod h1:ZilEsKkjp1K0e9qfUUdrHnz8teb1LU70L8JQzNSQmO8=
github.com/eyedeekay/checki2cp v0.0.13 h1:lSOtS7LzInJIPrMbBkoLhlQHloRFMx0u5nFaQl2pDrI=
github.com/eyedeekay/checki2cp v0.0.13/go.mod h1:3dCAyHmQ0WRd6xsBpL/W62gTcXU4P3kWfigrjeDZpAQ=
github.com/eyedeekay/checki2cp v0.0.15 h1:Vlwp9opuQJSgp139VVrLkKXRwLYYrXiBkqed35ZbqzY=
github.com/eyedeekay/checki2cp v0.0.15/go.mod h1:3dCAyHmQ0WRd6xsBpL/W62gTcXU4P3kWfigrjeDZpAQ=
github.com/eyedeekay/checki2cp v0.0.17 h1:md/CZMugwVrdkppReKoRmrkpELE1qE8gIlSFD8EuYlk=
github.com/eyedeekay/checki2cp v0.0.17/go.mod h1:kdHq1LqZxi2qarfyospSHrh4Aju5SydX+2AzlJKhSJM=
github.com/eyedeekay/eephttpd v0.0.0-20190903000420-52f5a8485a4e/go.mod h1:wFPQsNBnY95LkuujFEZARo7slafRwoF0D97FFHBoZro=
github.com/eyedeekay/go-ccw v0.0.0-20200403222455-d0e01222fd2a h1:zPI9ngyid7Wr92EHYanSOee6z0rWSlyKPt1nnOmZCu4=
github.com/eyedeekay/go-ccw v0.0.0-20200403222455-d0e01222fd2a/go.mod h1:k3EtNXTNE8UHnYqq/Ny7QiVPZIFtdiCuckEPT0qkR14=
github.com/eyedeekay/go-fpw v0.0.0-20200403201858-3d24733073ff h1:nmfiBxYeXYnUUB7sYoez7VT7mB99hFeHeZtXE69ot9A=
github.com/eyedeekay/go-fpw v0.0.0-20200403201858-3d24733073ff/go.mod h1:F4d0cXDXTK6ZsAnxmATan3VyDV4k9P9ciCGRKt/fVik=
github.com/eyedeekay/go-fpw v0.0.0-20200404005604-8ccf7dc81580 h1:Eo210WM4t+DLJ5rBmj1fnUAuCEM614zIvVUO7RIeTRw=
github.com/eyedeekay/go-fpw v0.0.0-20200404005604-8ccf7dc81580/go.mod h1:RyCx7KuH+5ryvIpUF7SpxiChLtjeuPbVFCIzf8shIFc=
github.com/eyedeekay/go-fpw v0.0.0-20200512000155-818dd5b71e7a h1:Hiv9cEmUjhUbHNzF9l8XyyYGskXFIGs0KJvcxGrzQik=
github.com/eyedeekay/go-fpw v0.0.0-20200512000155-818dd5b71e7a/go.mod h1:RyCx7KuH+5ryvIpUF7SpxiChLtjeuPbVFCIzf8shIFc=
github.com/eyedeekay/go-fpw v0.0.0-20200512022837-c8b4dcdc74d4 h1:fZggjpJu/JsYTCn1BjT1SICuEcab8Cyvz3BwI9aDIUw=
github.com/eyedeekay/go-fpw v0.0.0-20200512022837-c8b4dcdc74d4/go.mod h1:RyCx7KuH+5ryvIpUF7SpxiChLtjeuPbVFCIzf8shIFc=
github.com/eyedeekay/go-i2cp v0.0.0-20190716135428-6d41bed718b0 h1:rnn9OlD/3+tATEZNuiMR1C84O5CX8bZL2qqgttprKrw=
github.com/eyedeekay/go-i2cp v0.0.0-20190716135428-6d41bed718b0/go.mod h1:+P0fIhkqIYjo7exMJRTlSteRMbRyHbiBiKw+YlPWk+c=
github.com/eyedeekay/go-i2pcontrol v0.0.0-20200110011336-510cca77e350/go.mod h1:bhIQsVpbNNXMtcoZ9UF4hLQleOjaCgKGXiRRhNc8TOA=
github.com/eyedeekay/goSam v0.1.1-0.20190814204230-d4c9b8c57dd6 h1:+5eM/MhjGMWCGQCCqn9pb1bmvoRewweWhOaE6fA7kZ0=
github.com/eyedeekay/goSam v0.1.1-0.20190814204230-d4c9b8c57dd6/go.mod h1:kGTfZrncJ4CwMX3d1qA6bcMJTOcuTbOqgWg7WrFNAQ0=
github.com/eyedeekay/httptunnel v0.0.0-20190831065052-9eab288b8a82/go.mod h1:VeXBZz04xj4eUGAcD8ygn2WFxY/dAvRbSNYMWoDzMxc=
github.com/eyedeekay/httptunnel v0.0.0-20190831071439-0ff3d5f798fb/go.mod h1:SnCAM9CskhwSFkzDfh+H5yNTbvhcTeKekkuX0ejCcSk=
github.com/eyedeekay/httptunnel v0.0.0-20200116022455-631ab90f707d h1:ggsfRJcekoacUcTR2tqeBaIi/b/Zug4+nuff+m5nheU=
github.com/eyedeekay/httptunnel v0.0.0-20200116022455-631ab90f707d/go.mod h1:zLeRR3eJaYINzWRjbnXc84VuopURbgjIbw6HQ/Q1qgM=
github.com/eyedeekay/lorca v0.1.9-0.20200403221704-ea2ffcadfc1b h1:OsqPoSiY5lf1trNgwEZoIrcSDT1hGV51bPbAkZ6Dzps=
github.com/eyedeekay/lorca v0.1.9-0.20200403221704-ea2ffcadfc1b/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A=
github.com/eyedeekay/outproxy v0.0.0-20190908174238-22bd71d43733/go.mod h1:jUBr6XRbiuUBe/sSbVdO5upU4mp8842bdpXDsQY54Rc=
github.com/eyedeekay/portcheck v0.0.0-20190218044454-bb8718669680/go.mod h1:8VVIH19/CU2VFJB8P6e58Mo9nvDqqKgllS0oQY3F83U=
github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab h1:EfTRHxGSbiaEyxNzvKRBWVIDw3mD8xXGxj4gvwFzY7Q=
github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab/go.mod h1:h7mvUAMgZ/rtRDUOkvKTK+8LnDMeUhJSoa5EPdB51fc=
github.com/eyedeekay/sam-forwarder v0.0.0-20190814201550-7c0d7cb0d56c/go.mod h1:Ptrm1d4a3KC5/cN264Gn6OntYOmcuJ8Pkyd7+hA01gw=
github.com/eyedeekay/sam-forwarder v0.0.0-20190831071254-d67c0c0e311f/go.mod h1:u4K8aGwSIuMSQ/OzsH7zkshnEvCQgUupfexLXZIjsDI=
github.com/eyedeekay/sam-forwarder v0.0.0-20190905212604-029317222e15/go.mod h1:kFP6jkqHUTGGW/nMUZLnRonkPWE9fyEc8/eSU1CqTFg=
github.com/eyedeekay/sam-forwarder v0.0.0-20190908210105-71ca8cd65fda h1:Mpi42j17o2vXGZNmTAkv5pwXzVFKWkkAviSAjSF4xPs=
github.com/eyedeekay/sam-forwarder v0.0.0-20190908210105-71ca8cd65fda/go.mod h1:crhQdi30uVnJ5Xn3JAPoMxvyWg6yo5LOfH4JZ+VIaxA=
github.com/eyedeekay/sam3 v0.0.0-20190613034117-99ad6522ebe3/go.mod h1:Vrxh+71E3HVYqyRlT5Jg+E26sSuu8UNTLB4p8qyT408=
github.com/eyedeekay/sam3 v0.0.0-20190730185140-f8d54526ea25/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
github.com/eyedeekay/sam3 v0.32.2 h1:xODDY5nBVg0oK7KaYk7ofkXFoHPsmI1umhSv1TZlS7s=
github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
github.com/eyedeekay/zerobundle v0.0.0-20200729053534-6fdefaab976b h1:o3AMSGxze29dkXAs7bjFTNg/wO1SR29aH9+DLg1Q3Ys=
github.com/eyedeekay/zerobundle v0.0.0-20200729142507-09254e0fcd4a h1:DP3ZHtWFnq15iGkQ/NAskdxTwyUNhU/TQYGof2FytiQ=
github.com/eyedeekay/zerobundle v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:wSZgKbze5193l1gvlEMGmC2T9BSmfK/ZFx+w7GpPScE=
github.com/eyedeekay/zerobundle v0.0.0-20200729232301-a53636329828 h1:ID7+uAh7hFjYhsnENytlvQToWBQjh0L7rzQn/4Iv7OQ=
github.com/eyedeekay/zerobundle v0.0.0-20200729232301-a53636329828/go.mod h1:mFi4fRolEjIWy0BYMrlrBzoXsUM8NbwwGXNQnbtAh6Q=
github.com/eyedeekay/zerobundle v0.0.0-20200801013618-d7f06aa455d4 h1:fsSYcXnqPTvP8mRGDaxDF1U3fzRwiiegbYyh56TnuFQ=
github.com/eyedeekay/zerobundle v0.0.0-20200801013618-d7f06aa455d4/go.mod h1:mFi4fRolEjIWy0BYMrlrBzoXsUM8NbwwGXNQnbtAh6Q=
github.com/eyedeekay/zerobundle v0.0.0-20200801044052-02d339203f7c h1:ilkSjOMPWMjjeYuCLOeGq3a7pVlSzcZndNC6XjAOp2g=
github.com/eyedeekay/zerobundle v0.0.0-20200801044052-02d339203f7c/go.mod h1:mFi4fRolEjIWy0BYMrlrBzoXsUM8NbwwGXNQnbtAh6Q=
github.com/eyedeekay/zerobundle v0.0.0-20200801171255-e52955df6c06 h1:RMPN939tthCSPX339wS+nLYwZu/CFfJ6ZQ0seFnThbg=
github.com/eyedeekay/zerobundle v0.0.0-20200801171255-e52955df6c06/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200802020224-4ecb0983fab2 h1:34h7sCyBIqL5TbxPJy7LGUrpKUb8s/Db3gJBfd49eJk=
github.com/eyedeekay/zerobundle v0.0.0-20200802020224-4ecb0983fab2/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200802032933-4aae53e45577 h1:aVjc4ct7XsrPXy4RGCntjg+Mp+DucCU6VjTh48W84GQ=
github.com/eyedeekay/zerobundle v0.0.0-20200802032933-4aae53e45577/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200802035941-c66d7eb01340 h1:PaMh/zhViPFXIeJ4sMkRPPBDCuIEGeUaHO0eLNosT98=
github.com/eyedeekay/zerobundle v0.0.0-20200802035941-c66d7eb01340/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200802064839-ff08f711c3f9 h1:ROVKA3xcRXkmgHaNoq/6xJgSZYSo8bzkXF3q1K6j9Wg=
github.com/eyedeekay/zerobundle v0.0.0-20200802064839-ff08f711c3f9/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200802224726-ade60064998c h1:vne+x6MOOLls+wxN23VaJ3qgF8Qq3vdebK4OkpOlxIM=
github.com/eyedeekay/zerobundle v0.0.0-20200802224726-ade60064998c/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200803002433-d08cdaba1810 h1:09MAije/deFIkcARbMKbAIG3IH2puZjLG5OV45y+F+I=
github.com/eyedeekay/zerobundle v0.0.0-20200803002433-d08cdaba1810/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle v0.0.0-20200804040541-f28536b381d0 h1:mP6OZ7FpPbkG6u7RqDxiDcLkRRGivsno2JWAgiwucfU=
github.com/eyedeekay/zerobundle v0.0.0-20200804040541-f28536b381d0/go.mod h1:J4pHO/M5C5c5kD2nwCHuJc06i0mkOjSwIurnj7fVIPY=
github.com/eyedeekay/zerobundle/parts v0.0.0-20200729142507-09254e0fcd4a h1:kS2ZOf/ZiHnV+JL/V5yxr4I9qDLSvKXBjmHUm/xCPRM=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200729142507-09254e0fcd4a h1:SCBVcTjxLI1idb/Idgf3WJN9FdKKnnauoJCd8QRfMVE=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:tVoCDPZqyc9Q5NKmU7m9jMHCFLuDhurZPsnnzv89pGE=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200729225350-f5800a7c3c3f h1:82utnE2TpNxCQRNWclzglpdNvug0MHZxvHjzLTbnRdA=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:tVoCDPZqyc9Q5NKmU7m9jMHCFLuDhurZPsnnzv89pGE=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200801165455-baeb0e58fc5a h1:YB1v+KkQusKKe7UjXIV2vI87okJXmBC7UHjnY6BkL04=
github.com/eyedeekay/zerobundle/parts/aa v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:tVoCDPZqyc9Q5NKmU7m9jMHCFLuDhurZPsnnzv89pGE=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200729142507-09254e0fcd4a h1:1DgXjWc4ZXTnC4WGsHY8HAA8QdCrB67+/nZGXTQbIr4=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:NKlWiAbDc3kJWP/G6OhSrqslLlslDCdv7nKoU0GTyxo=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200729225350-f5800a7c3c3f h1:swREl2GOW6U1U+RNJfOXWeiKV29yFXKmGCJoKtfRAvU=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:NKlWiAbDc3kJWP/G6OhSrqslLlslDCdv7nKoU0GTyxo=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200801165455-baeb0e58fc5a h1:tRCO7vRlUEBN/RxmUomwAlKQtZ6gtRoDMDyP2fravKI=
github.com/eyedeekay/zerobundle/parts/ab v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:aCWmPFXSHktdhMDHyIxJovmz23UfaQteyh9p7NEMdqk=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200729142507-09254e0fcd4a h1:rwMHSafcl+31LFgF3ISBWsDwdpn3bjBir2Ro+61c7ow=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:AuRFy8afdHaiMGYwzYHe5y/zMhR4jAmlVp1pkHnpqK8=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200729225350-f5800a7c3c3f h1:cEHhuCYuI0RUPpCnCL5J6TEJ1HFE/+xZUr9Npu/fn3E=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:AuRFy8afdHaiMGYwzYHe5y/zMhR4jAmlVp1pkHnpqK8=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200801165455-baeb0e58fc5a h1:I9cfKFBva/vELjboNMnziXs3yBWAP4efOvpk/2BxRq0=
github.com/eyedeekay/zerobundle/parts/ac v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:E8Mmkic2QrlcHaV75Hjne8f88lDpLNa/x96WEGcdHvA=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200729142507-09254e0fcd4a h1:DcnJHPJytYcO3wJuNJsg8mHRh1n1EMbxCNfbdavs0Dc=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:62U7cYEvzk7Ifxw/Ar5v4IuJhIk0tmmtBXzfQ9wvYZk=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200729225350-f5800a7c3c3f h1:CF7HMHXP5DOnrXjX4qvUAA1L4duZXiebkUzXls+rGzA=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:62U7cYEvzk7Ifxw/Ar5v4IuJhIk0tmmtBXzfQ9wvYZk=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200801165455-baeb0e58fc5a h1:IKvjrgUqsAFv53gIC8XsanV+tO9m0DbH/qq3yJHmkYU=
github.com/eyedeekay/zerobundle/parts/ad v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:arirCFNWdkg3MySrwkP6kn6iVe2CckYxe8G+hnJRt1E=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200729142507-09254e0fcd4a h1:bdiHNCtlUCTTxRD2dx7Na/Rihl4KFZ3pSKKcAFNvQlU=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:MKLWNSl5M4lATW82deXgDyqtLXwkef8qLgQi32iUios=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200729225350-f5800a7c3c3f h1:pcG8Ij6x7p2Ipohwx4xhs5s6cOIIjKyW9F0x6HZXJVE=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:MKLWNSl5M4lATW82deXgDyqtLXwkef8qLgQi32iUios=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200801165455-baeb0e58fc5a h1:03H21zmL6cvAn5SON3+pq1Xn15zpnaYWONItSWO8Arg=
github.com/eyedeekay/zerobundle/parts/ae v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:5SG9xD0lwrshQ9vddGUMRhhOg5ckglhFWnuRGCX2oA0=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200729142507-09254e0fcd4a h1:ISq9LKIkHsiJBko6QwXlxAO8Fzsxdphip/yWQ0X+FMQ=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:LpDs3WuJeg+W2ovaaaV/zki2+qUw1u8kivAkBrYNn3Y=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200729225350-f5800a7c3c3f h1:A0BCGzmYiI7j+0xnznR/oBUd9tlPBxzHbEoC5s6Xz8o=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:LpDs3WuJeg+W2ovaaaV/zki2+qUw1u8kivAkBrYNn3Y=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200801165455-baeb0e58fc5a h1:Tkgc2GkvJxTzt89jeN9vXFRCgYhLgj3l+QFMnXbLiHE=
github.com/eyedeekay/zerobundle/parts/af v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:qdc81OrWUMbHJh5p6AwnHm/byMu5F37TZ77BL2UuJco=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200729142507-09254e0fcd4a h1:g3WOL17K3aWxOaAKp9eg3tgRN54P2YyBpdWFRSfIdDQ=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:F0f897NnR0kBLV6zRIEHp7lhHYzBo2QNG6RhSsm0j8g=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200729225350-f5800a7c3c3f h1:HY02d4xi0ikUNOrbbIR+ZL7EgGvIqQHfOztCFa+l2PY=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:F0f897NnR0kBLV6zRIEHp7lhHYzBo2QNG6RhSsm0j8g=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200801165455-baeb0e58fc5a h1:r7vfoe6N3yuZHH0FO2jA8aUAj7C4b9QupBDMCPIFqgw=
github.com/eyedeekay/zerobundle/parts/ag v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:jwWe41RVcOY1vPhdC+k6h5WGI6Zy4AjiyZgioOoglGo=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200729142507-09254e0fcd4a h1:Fa6fCH5UJCBEZEvCHNM7mAVH1/XkUkEeD/TyYbeRcyA=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:LQQiw6dlpSNb9vQFLHqOWUSGsNuPulqet/gLzgntWKk=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200729225350-f5800a7c3c3f h1:iTjw3qHSXRs4s6v21eKw5TFBn/jamxivITVUnld/TWQ=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:LQQiw6dlpSNb9vQFLHqOWUSGsNuPulqet/gLzgntWKk=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200801165455-baeb0e58fc5a h1:Jfu5QObHI0BLhKi9Hudu1MTjfLuccyC6a8WtrVSh1N4=
github.com/eyedeekay/zerobundle/parts/ah v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:dlc63NsWSrDaqa85np61lWEiobbpP/4qhtm/4S4gnZQ=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200729142507-09254e0fcd4a h1:T4Cm1uKjtDU4Fly9vaPvOY4sf6VVkaERQhvyALnVnBw=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:HD5UclEN5RPgVQ2Ba/RdNWhtQ1d12Gx72CKksezEdhc=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200729225350-f5800a7c3c3f h1:OiWtQwfYKwrXJRXdaug/KZ49wKRpfCWQA6trHpo57Oo=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:HD5UclEN5RPgVQ2Ba/RdNWhtQ1d12Gx72CKksezEdhc=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200801165455-baeb0e58fc5a h1:LP1ZIS5T4drVnKunx/jTsS5ehaEqs0YW6ypJKPfKaVQ=
github.com/eyedeekay/zerobundle/parts/ai v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:UWWZyb/ESoEsNduVilUxMj4DJ2kn8ldJL5E2gy2IPV8=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200729142507-09254e0fcd4a h1:AITYqhm/b9RCxeCvRWFx8lu2Ds8FeII63hbNF7JvnIM=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:oX+vQpNrt5jVdJwdFD+kVMDNfYpRNCB8E8me6xOrqos=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200729225350-f5800a7c3c3f h1:jkwvPJhQg1SBE65G4D905Cjvl6uRIkM0UhowGzRo+LE=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:oX+vQpNrt5jVdJwdFD+kVMDNfYpRNCB8E8me6xOrqos=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200801165455-baeb0e58fc5a h1:sQq48QEVd4AJ0jdA+fpPG/7eSn6G3LK9v53YOA01omg=
github.com/eyedeekay/zerobundle/parts/aj v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:PTleyTXt8iqQtqp00m7DojOP/O9CD4B0ep5zTHJxiCc=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200729142507-09254e0fcd4a h1:+aFtyD7v1mfjtuqdBDwPV0wA31GSB3l+BSkYL3l1xZk=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:uUp6ltyxP5+9AD4A+ythEBdkglMRkhgGV8SM+eXZqTw=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200729225350-f5800a7c3c3f h1:jqfyCNiR8ZsYrtzBMrJeNRPzxshV2NRo2a1KX5SQ52A=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:uUp6ltyxP5+9AD4A+ythEBdkglMRkhgGV8SM+eXZqTw=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200801165455-baeb0e58fc5a h1:7cERcjt6rArcqrL2I36LN/wYF/gWFH3r8pCOL/Ytmxk=
github.com/eyedeekay/zerobundle/parts/ak v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:3hUQinkmOKFMCBur/VjKTMSsFU9Q5R6vpDttyLpXDTA=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200729142507-09254e0fcd4a h1:h+8wlDouDmrZW2NZwRy5UaHAewkZps4KYpJs5bZljo0=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200729142507-09254e0fcd4a/go.mod h1:lZDRMeWc47sspGEW0wOGtUqEh+WWA2z5GGTCEFgddVI=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200729225350-f5800a7c3c3f h1:b1OxCdkxZq3altokLgnTImPGwUwIwdASUlkKGRoYAe4=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200729225350-f5800a7c3c3f/go.mod h1:lZDRMeWc47sspGEW0wOGtUqEh+WWA2z5GGTCEFgddVI=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200801165455-baeb0e58fc5a h1:Un1Yacddsyd8zF8ZhOn4BltbjqLcXIfhBc6xo6lHcpU=
github.com/eyedeekay/zerobundle/parts/al v0.0.0-20200801165455-baeb0e58fc5a/go.mod h1:9FNKW4YG3sCm/UyMa4ZpYUJFA4K1xdMXN0bl7xwt5HE=
github.com/frankban/quicktest v1.4.0 h1:rCSCih1FnSWJEel/eub9wclBSqpF2F/PuvxUWGWnbO8=
github.com/frankban/quicktest v1.4.0/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ=
github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/glycerine/goconvey v0.0.0-20190315024820-982ee783a72e/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
github.com/go-gl/glfw v0.0.0-20181014061658-691ee1b84c51/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
github.com/golang/gddo v0.0.0-20200324184333-3c2cc9a6329d/go.mod h1:sam69Hju0uq+5uvLJUMDlsKlQ21Vrs1Kd/1YFPNYdOU=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/lint v0.0.0-20170918230701-e5d664eb928e/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.1.1-0.20171103154506-982329095285/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190309154008-847fc94819f9/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
github.com/gosuri/uilive v0.0.3/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
github.com/gosuri/uiprogress v0.0.1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
github.com/gregjones/httpcache v0.0.0-20170920190843-316c5e0ff04e/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69 h1:7xsUJsB2NrdcttQPa7JLEaGzvdbk7KvfrjgHZXOQRo0=
github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69/go.mod h1:YLEMZOtU+AZ7dhN9T/IpGhXVGly2bvkJQ+zxj3WeVQo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v0.0.0-20170914154624-68e816d1c783/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/huandu/xstrings v1.2.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/inconshreveable/log15 v0.0.0-20170622235902-74a0988b5f80/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jpillora/go-tcp-proxy v1.0.0/go.mod h1:dDLgFeNeCec5CsLCmJlat+bb/oNDHc3d90G+anWRcBQ=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/justinas/nosurf v0.0.0-20190416172904-05988550ea18/go.mod h1:Aucr5I5chr4OCuuVB4LTuHVrKHBuyRSo7vM2hqrcb7E=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.9.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.10.5 h1:7q6vHIqubShURwQz8cQK6yIe/xC3IF0Vm7TGfqjewrc=
github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/klauspost/pgzip v1.2.3 h1:Ce2to9wvs/cuJ2b86/CKQoTYr9VHfpanYosZ0UBJqdw=
github.com/klauspost/pgzip v1.2.3/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A=
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lukechampine/stm v0.0.0-20191022212748-05486c32d236/go.mod h1:wTLsd5FC9rts7GkMpsPGk64CIuea+03yaLAp19Jmlg8=
github.com/magiconair/properties v1.7.4-0.20170902060319-8d7837e64d3c/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/majestrate/i2p-tools v0.0.0-20170507194519-afc8e46afa95/go.mod h1:e/TZ1O6X9t0qitnKc3xvHq8VXDpm/FmYuFf21epEkUc=
github.com/mattn/go-colorable v0.0.10-0.20170816031813-ad5389df28cd/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-isatty v0.0.2/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
github.com/mattn/go-sqlite3 v1.7.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.13.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v2.0.2+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU=
github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=
github.com/mholt/archiver/v3 v3.3.0 h1:vWjhY8SQp5yzM9P6OJ/eZEkmi3UAbRrxCq48MxjAzig=
github.com/mholt/archiver/v3 v3.3.0/go.mod h1:YnQtqsp+94Rwd0D/rk5cnLrxusUBUXg+08Ebtr1Mqao=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/mitchellh/mapstructure v0.0.0-20170523030023-d0303fe80992/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-http-dialer v0.0.0-20161116154839-378f744fb2b8 h1:BhQQWYKJwXPtAhm12d4gQU4LKS9Yov22yOrDc2QA7ho=
github.com/mwitkow/go-http-dialer v0.0.0-20161116154839-378f744fb2b8/go.mod h1:ntWhh7pzdiiRKBMxUB5iG+Q2gmZBxGxpX1KyK6N8kX8=
github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
github.com/pelletier/go-toml v1.0.1-0.20170904195809-1d6b12b7cb29/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU=
github.com/pierrec/lz4 v1.0.1 h1:w6GMGWSsCI04fTM8wQRdnW74MuJISakuUU0onU0TYB4=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v3 v3.3.2 h1:QTUOCbMNDbK4PYtkuHyOBd28C0UhPBw3T4OH4WpFDik=
github.com/pierrec/lz4/v3 v3.3.2/go.mod h1:280XNCGS8jAcG++AHdd6SeWnzyJ1w9oow2vbORyey8Q=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/schollz/progressbar/v2 v2.13.2/go.mod h1:6YZjqdthH6SCZKv2rqGryrxPtfmRB/DWZxSMfCXPyD8=
github.com/sger/go-hashdir v0.0.1 h1:ii/IIGYNJCpvSqTV63LbfASPpQqazRRS9ErvmBAUNw0=
github.com/sger/go-hashdir v0.0.1/go.mod h1:LmCpMSJQKVSNBt2rFKz/upjHTGfwNxn5MAmIAUd4qXg=
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v0.0.0-20170901052352-ee1bd8ee15a1/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.1.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
github.com/spf13/jwalterweatherman v0.0.0-20170901151539-12bd96e66386/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.1-0.20170901120850-7aff26db30c1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.0.0/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M=
github.com/tfriedel6/canvas v0.9.2/go.mod h1:O1YsCm9agdCl48M82l/1tUszUh1nR5zfpLcHxM5D7Cw=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tinylib/msgp v1.1.1/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4=
github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/veandco/go-sdl2 v0.3.3/go.mod h1:FB+kTpX9YTE+urhYiClnRzpOXbiWgaU3+5F2AB78DPg=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
github.com/willf/bloom v2.0.3+incompatible/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE=
github.com/zieckey/goini v0.0.0-20180118150432-0da17d361d26 h1:E0lEWrifmR0ACbGf5PLji1XbW6rtIXLHCXO/YOqi0AE=
github.com/zieckey/goini v0.0.0-20180118150432-0da17d361d26/go.mod h1:TQpdgg7I9+PFIkatlx/dnZyZb4iZyCUx1HJj4rXi3+E=
github.com/zserge/lorca v0.1.8/go.mod h1:gTrVdXKyWxNhc8aUb1Uu3s0mY343arR1T6jUtxmBxR8=
github.com/zserge/lorca v0.1.9 h1:vbDdkqdp2/rmeg8GlyCewY2X8Z+b0s7BqWyIQL/gakc=
github.com/zserge/lorca v0.1.9/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A=
github.com/zserge/webview v0.0.0-20190123072648-16c93bcaeaeb/go.mod h1:a1CV8KR4Dd1eP2g+mEijGOp+HKczwdKHWyx0aPHKvo4=
gitlab.com/golang-commonmark/html v0.0.0-20180917080848-cfaf75183c4a/go.mod h1:JT4uoTz0tfPoyVH88GZoWDNm5NHJI2VbUW+eyPClueI=
gitlab.com/golang-commonmark/linkify v0.0.0-20180917065525-c22b7bdb1179/go.mod h1:Gn+LZmCrhPECMD3SOKlE+BOHwhOYD9j7WT9NUtkCrC8=
gitlab.com/golang-commonmark/markdown v0.0.0-20181102083822-772775880e1f/go.mod h1:SIHlEr9462fpIfTrVWf3GqQDxnA65Vm3BMMsUtuA6W0=
gitlab.com/golang-commonmark/mdurl v0.0.0-20180912090424-e5bce34c34f2/go.mod h1:wQk4rLkWrdOPjUAtqJRJ10hIlseLSVYWP95PLrjDF9s=
gitlab.com/golang-commonmark/puny v0.0.0-20180912090636-2cd490539afe/go.mod h1:P9LSM1KVzrIstFgUaveuwiAm8PK5VTB3yJEU8kqlbrU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472 h1:Gv7RPwsi3eZ2Fgewe3CBsuOebPwO27PoXzRpJPsvSSM=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.0.0-20181109002202-aa35264064ba/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/mobile v0.0.0-20181026062114-a27dd33d354d/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190318221613-d196dffd7c2b/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191125084936-ffdde1057850/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190830142957-1e83adbbebd0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190910064555-bbd175535a8b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191126131656-8a8471f7e56d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190830223141-573d9926052a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20170921000349-586095a6e407/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20170918111702-1e559d0a00ee/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/grpc v1.2.1-0.20170921194603-d4b75ebd4f9f/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

168
httptunnel.go Normal file
View File

@@ -0,0 +1,168 @@
package main
import (
"github.com/eyedeekay/httptunnel"
"github.com/eyedeekay/httptunnel/multiproxy"
"github.com/eyedeekay/zerobundle"
"context"
"flag"
"io/ioutil"
"log"
"net"
"net/http"
"os"
"os/signal"
"path/filepath"
"strings"
"time"
)
var i2cpConf = `i2cp.tcp.host=127.0.0.1
i2cp.tcp.port=7654
`
var (
tunnelName = flag.String("service-name", "sam-browser-proxy", "Name of the service(can be anything)")
aggressiveIsolation = flag.Bool("mode-aggressive", false, "Create a new client for every single eepSite, rather than making use of contextual identities")
controlPortString = flag.String("control-addr", "127.0.0.1:7951", ":port of the SAM bridge")
proxyPortString = flag.String("proxy-addr", "127.0.0.1:4444", ":port of the SAM bridge")
samHostString = flag.String("bridge-host", "127.0.0.1", "host: of the SAM bridge")
samPortString = flag.String("bridge-port", "7656", ":port of the SAM bridge")
watchProfiles = flag.String("watch-profiles", "~/.mozilla/.firefox.profile.i2p.default/user.js,~/.mozilla/.firefox.profile.i2p.debug/user.js", "Monitor and control these Firefox profiles")
destfile = flag.String("dest-file", "invalid.tunkey", "Use a long-term destination key")
debugConnection = flag.Bool("conn-debug", false, "Print connection debug info")
inboundTunnelLength = flag.Int("in-tun-length", 2, "Tunnel Length(default 3)")
outboundTunnelLength = flag.Int("out-tun-length", 2, "Tunnel Length(default 3)")
inboundTunnels = flag.Int("in-tunnels", 2, "Inbound Tunnel Count(default 2)")
outboundTunnels = flag.Int("out-tunnels", 2, "Outbound Tunnel Count(default 2)")
inboundBackups = flag.Int("in-backups", 1, "Inbound Backup Count(default 1)")
outboundBackups = flag.Int("out-backups", 1, "Inbound Backup Count(default 1)")
inboundVariance = flag.Int("in-variance", 0, "Inbound Backup Count(default 0)")
outboundVariance = flag.Int("out-variance", 0, "Inbound Backup Count(default 0)")
dontPublishLease = flag.Bool("no-publish", true, "Don't publish the leaseset(Client mode)")
encryptLease = flag.Bool("encrypt-lease", false, "Encrypt the leaseset(default false, inert)")
reduceIdle = flag.Bool("reduce-idle", false, "Reduce tunnels on extended idle time")
useCompression = flag.Bool("use-compression", true, "Enable gzip compression")
reduceIdleTime = flag.Int("reduce-idle-time", 2000000, "Reduce tunnels after time(Ms)")
reduceIdleQuantity = flag.Int("reduce-idle-tunnels", 1, "Reduce tunnels to this level")
// runCommand = flag.String("run-command", "", "Execute command using the *_PROXY environment variables")
// runArguments = flag.String("run-arguments", "", "Pass arguments to run-command")
suppressLifetime = flag.Bool("suppress-lifetime-output", true, "Suppress \"Tunnel lifetime\" output")
)
func WriteI2CPConf() error {
dir, err := zerobundle.UnpackZeroDir()
if err != nil {
return err
}
os.Setenv("I2CP_HOME", dir)
os.Setenv("GO_I2CP_CONF", "/.i2cp.conf")
home := os.Getenv("I2CP_HOME")
conf := os.Getenv("GO_I2CP_CONF")
if err := ioutil.WriteFile(filepath.Join(home, conf), []byte(i2cpConf), 0644); err != nil {
return err
}
return nil
}
func proxyMain(ctx context.Context) {
profiles := strings.Split(*watchProfiles, ",")
srv := &http.Server{
ReadTimeout: 600 * time.Second,
WriteTimeout: 10 * time.Second,
Addr: *proxyPortString,
}
var err error
srv.Handler, err = i2pbrowserproxy.NewHttpProxy(
i2pbrowserproxy.SetHost(*samHostString),
i2pbrowserproxy.SetPort(*samPortString),
i2pbrowserproxy.SetProxyAddr(*proxyPortString),
i2pbrowserproxy.SetControlAddr(*controlPortString),
i2pbrowserproxy.SetDebug(*debugConnection),
i2pbrowserproxy.SetInLength(uint(*inboundTunnelLength)),
i2pbrowserproxy.SetOutLength(uint(*outboundTunnelLength)),
i2pbrowserproxy.SetInQuantity(uint(*inboundTunnels)),
i2pbrowserproxy.SetOutQuantity(uint(*outboundTunnels)),
i2pbrowserproxy.SetInBackups(uint(*inboundBackups)),
i2pbrowserproxy.SetOutBackups(uint(*outboundBackups)),
i2pbrowserproxy.SetInVariance(*inboundVariance),
i2pbrowserproxy.SetOutVariance(*outboundVariance),
i2pbrowserproxy.SetUnpublished(*dontPublishLease),
i2pbrowserproxy.SetReduceIdle(*reduceIdle),
i2pbrowserproxy.SetCompression(*useCompression),
i2pbrowserproxy.SetReduceIdleTime(uint(*reduceIdleTime)),
i2pbrowserproxy.SetReduceIdleQuantity(uint(*reduceIdleQuantity)),
i2pbrowserproxy.SetKeysPath(*destfile),
i2pbrowserproxy.SetProxyMode(*aggressiveIsolation),
)
if err != nil {
log.Fatal(err)
}
ctrlsrv := &http.Server{
ReadHeaderTimeout: 600 * time.Second,
WriteTimeout: 600 * time.Second,
Addr: *controlPortString,
}
ctrlsrv.Handler, err = i2phttpproxy.NewSAMHTTPController(profiles, srv)
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
for sig := range c {
if sig == os.Interrupt {
srv.Handler.(*i2pbrowserproxy.SAMMultiProxy).Close()
srv.Shutdown(ctx)
ctrlsrv.Shutdown(ctx)
}
}
}()
cln, err := net.Listen("tcp4", *controlPortString)
if err != nil {
log.Fatal(err)
}
go func() {
log.Println("Starting control server on", cln.Addr())
if err := ctrlsrv.Serve(cln); err != nil {
if err == http.ErrServerClosed {
return
}
log.Fatal("Serve:", err)
}
log.Println("Stopping control server on", cln.Addr())
}()
ln, err := net.Listen("tcp4", *proxyPortString)
if err != nil {
log.Fatal(err)
}
go func() {
log.Println("Starting proxy server on", ln.Addr())
if err := srv.Serve(ln); err != nil {
if err == http.ErrServerClosed {
return
}
log.Fatal("Serve:", err)
}
log.Println("Stopping proxy server on", ln.Addr())
}()
go counter()
<-ctx.Done()
}
func counter() {
var x int
for {
if !*suppressLifetime {
log.Println("Identity is", x, "minute(s) old")
time.Sleep(1 * time.Minute)
x++
}
}
}

File diff suppressed because one or more lines are too long

130
lib/firefox.go Normal file
View File

@@ -0,0 +1,130 @@
package i2pfirefox
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"os"
"os/signal"
"path/filepath"
"syscall"
. "github.com/eyedeekay/go-fpw"
)
func UserFind() string {
if os.Geteuid() == 0 {
log.Fatal("Do not run this application as root!")
}
if un, err := os.UserHomeDir(); err == nil {
os.MkdirAll(filepath.Join(un, "i2p"), 0755)
os.MkdirAll(filepath.Join(un, "i2p", "opt"), 0755)
os.MkdirAll(filepath.Join(un, "i2p", "firefox-profiles", NOM), 0755)
os.MkdirAll(filepath.Join(un, "i2p", "rhizome"), 0755)
return un
}
return ""
}
var UserDir = filepath.Join(UserFind(), "i2p", "firefox-profiles", NOM)
var GingerDir = filepath.Join(UserFind(), "i2p", "rhizome")
func WriteExtension(val os.FileInfo, system *fs) bool {
var firstrun = false
if len(val.Name()) > 3 {
if !val.IsDir() {
file, err := system.Open(val.Name())
if err != nil {
log.Fatal(err.Error())
}
sys := bytes.NewBuffer(nil)
if _, err := io.Copy(sys, file); err != nil {
log.Fatal(err.Error())
}
log.Println(val.Name()[len(val.Name())-3:], "== xpi")
if val.Name()[len(val.Name())-3:] == "xpi" {
extension := filepath.Join(UserDir, "extensions", val.Name())
if _, err := os.Stat(extension); os.IsNotExist(err) {
if err := ioutil.WriteFile(extension, sys.Bytes(), val.Mode()); err == nil {
ARGS = append(ARGS, extension)
log.Println("wrote", extension)
} else {
log.Fatal(err)
}
firstrun = true
}
} else {
log.Println(filepath.Join(UserDir, val.Name()), "ignored")
}
}
} else {
log.Println(filepath.Join(UserDir, val.Name()), "ignored", "contents", val.Sys())
}
return firstrun
}
func WriteProfile(FS *fs) bool {
var firstrun = false
if embedded, err := FS.Readdir(-1); err != nil {
log.Fatal("Extension error, embedded extension not read.", err)
} else {
os.MkdirAll(filepath.Join(UserDir, "extensions"), 0755)
/*err := ioutil.WriteFile(filepath.Join(UserDir, "extension-settings.json"), []byte(EXTENSIONPREFS), 0644)
if err != nil {
log.Fatal(err)
}*/
for _, val := range embedded {
if val.IsDir() {
os.MkdirAll(filepath.Join(UserDir, val.Name()), val.Mode())
} else {
firstrun = WriteExtension(val, FS)
}
}
}
return firstrun
}
func FirefoxMain() {
firstrun := WriteProfile(FS)
prefs := filepath.Join(UserDir, "/user.js")
if _, err := os.Stat(prefs); os.IsNotExist(err) {
if err := ioutil.WriteFile(prefs, []byte(PREFS), 0644); err == nil {
log.Println("wrote", prefs)
} else {
log.Fatal(err)
}
}
if firstrun {
FIREFOX, ERROR := SecureExtendedFirefox(UserDir, false, EXTENSIONS, EXTENSIONHASHES, ARGS...)
if ERROR != nil {
log.Fatal(ERROR)
}
defer FIREFOX.Close()
<-FIREFOX.Done()
} else {
FIREFOX, ERROR := BasicFirefox(UserDir, false, ARGS...)
if ERROR != nil {
log.Fatal(ERROR)
}
defer FIREFOX.Close()
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
<-FIREFOX.Done()
}
}

33
lib/pure.go Normal file
View File

@@ -0,0 +1,33 @@
// +build !variant
package i2pfirefox
var NOM = "pure"
var ARGS = []string{
/*"--example-arg",*/
}
var PREFS = `
user_pref("privacy.firstparty.isolate", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable First Party Isolation (FPI) - higly suggested to set this to true- IF DISABLING FPI, READ RELEVANT SECTIONS OF USER.JS!
user_pref("privacy.resistFingerprinting", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable Firefox built-in ability to resist fingerprinting by web servers (used to uniquely identify the browser)) - higly suggested to set this to true
user_pref("privacy.resistFingerprinting.letterboxing", true); // [SET] [!PRIV=true] whether to set the viewport size to a generic dimension in order to resist fingerprinting) - suggested to set this to true, however doing so may make the viewport smaller than the window
user_pref("browser.display.use_document_fonts", 0); // [SET] [SAFE=1] [!PRIV=0] whether to allow websites to use fonts they specify - 0=no, 1=yes - setting this to 0 will uglify many websites - value can be easily flipped with the Toggle Fonts add-on
user_pref("browser.download.forbid_open_with", true); // whether to allow the 'open with' option when downloading a file
user_pref("browser.library.activity-stream.enabled", false); // whether to enable Activity Stream recent Highlights in the Library
user_pref("network.proxy.type", 1); // [SET] [SAFE=1] [PRIV=1] [ALTSAFE=5] [ALTPRIV=5] 1==http, 5=socks
user_pref("network.proxy.http", "127.0.0.1"); // [SET] 127.0.0.1
user_pref("network.proxy.http_port", 4444); // [SET] 4444
user_pref("network.proxy.ssl", "127.0.0.1"); // [SET] 127.0.0.1
user_pref("network.proxy.ssl_port", 4444); // [SET] 4444
user_pref("network.proxy.ftp", "127.0.0.1"); // [SET] 127.0.0.1
user_pref("network.proxy.ftp_port", 4444); // [SET] 4444
user_pref("network.proxy.socks", "127.0.0.1"); // [SET] 127.0.0.1
user_pref("network.proxy.socks_port", 4444); // [SET] 4444
user_pref("network.proxy.share_proxy_settings", true); // [SET] [SAFE=true] [PRIV=true] does not actually apply to http, but leave it set anyway so that we preserve the SOCKS option
user_pref("network.proxy.socks_remote_dns", true); // [SET] [SAFE=true] [PRIV=true]
user_pref("network.proxy.allow_hijacking_localhost", true) // [SET] [SAFE=true] [PRIV=true] Required for blackholing localhost requests when using anonymous proxies.
`
var EXTENSIONPREFS = `{}`

14
lib/pureextensions.go Normal file
View File

@@ -0,0 +1,14 @@
// +build !variant
package i2pfirefox
var EXTENSIONS = []string{
"i2ppb@eyedeekay.github.io.xpi",
"uBlock0@raymondhill.net.xpi",
"uMatrix@raymondhill.net.xpi",
}
var EXTENSIONHASHES = []string{
"f7eb75e5c41d94b593fa71cb839d07c14e9517f5fa1cb440f8a798df2bb08e17",
"997aac00064665641298047534c9392492ef09f0cbf177b6a30d4fa288081579",
"991f0fa5c64172b8a2bc0a010af60743eba1c18078c490348e1c6631882cbfc7",
}

19
lib/variant.go Normal file
View File

@@ -0,0 +1,19 @@
// +build variant
package i2pfirefox
var ARGS = []string{
/*"--example-arg",*/
}
var PREFS = `
user_pref("privacy.firstparty.isolate", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable First Party Isolation (FPI) - higly suggested to set this to true- IF DISABLING FPI, READ RELEVANT SECTIONS OF USER.JS!
user_pref("privacy.resistFingerprinting", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable Firefox built-in ability to resist fingerprinting by web servers (used to uniquely identify the browser)) - higly suggested to set this to true
user_pref("privacy.resistFingerprinting.letterboxing", true); // [SET] [!PRIV=true] whether to set the viewport size to a generic dimension in order to resist fingerprinting) - suggested to set this to true, however doing so may make the viewport smaller than the window
user_pref("browser.display.use_document_fonts", 0); // [SET] [SAFE=1] [!PRIV=0] whether to allow websites to use fonts they specify - 0=no, 1=yes - setting this to 0 will uglify many websites - value can be easily flipped with the Toggle Fonts add-on
user_pref("browser.download.forbid_open_with", true); // whether to allow the 'open with' option when downloading a file
user_pref("browser.library.activity-stream.enabled", false); // whether to enable Activity Stream recent Highlights in the Library
user_pref("network.proxy.allow_hijacking_localhost", true) // [SET] [SAFE=true] [PRIV=true] Required for blackholing localhost requests when using anonymous proxies.
`
var EXTENSIONPREFS = `{}`

18
lib/variantextensions.go Normal file
View File

@@ -0,0 +1,18 @@
// +build variant
package i2pfirefox
var NOM = "variant"
var EXTENSIONS = []string{
"i2ppb@eyedeekay.github.io.xpi",
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
"uBlock0@raymondhill.net.xpi",
"uMatrix@raymondhill.net.xpi",
}
var EXTENSIONHASHES = []string{
"f7eb75e5c41d94b593fa71cb839d07c14e9517f5fa1cb440f8a798df2bb08e17",
"f53f00ec9e689c7ddb4aaeec56bf50e61161ce7fbaaf2d2b49032c4c648120a2",
"997aac00064665641298047534c9392492ef09f0cbf177b6a30d4fa288081579",
"991f0fa5c64172b8a2bc0a010af60743eba1c18078c490348e1c6631882cbfc7",
}

170
main.go
View File

@@ -1,111 +1,111 @@
//go:generate go run -tags generate gen.go
//go:generate go run -tags generate gen.go extensions.go
package main
import (
"bytes"
"io"
"io/ioutil"
"context"
"flag"
"fmt"
"log"
"net"
"net/http"
"os"
"path/filepath"
"runtime"
"time"
"github.com/eyedeekay/checki2cp"
. "github.com/eyedeekay/GingerShrew/import"
. "github.com/eyedeekay/go-fpw"
. "github.com/eyedeekay/i2pfirefox/lib"
"github.com/eyedeekay/zerobundle"
)
var EXTENSIONS = []string{
"i2ppb@eyedeekay.github.io.xpi",
"{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi",
"uBlock0@raymondhill.net.xpi",
"uMatrix@raymondhill.net.xpi",
}
var EXTENSIONHASHES = []string{
"bca6f385637c76445775af6271f8e9621966283f2f648cef9db9c635b6662f6d",
"f53f00ec9e689c7ddb4aaeec56bf50e61161ce7fbaaf2d2b49032c4c648120a2",
"997aac00064665641298047534c9392492ef09f0cbf177b6a30d4fa288081579",
"991f0fa5c64172b8a2bc0a010af60743eba1c18078c490348e1c6631882cbfc7",
}
var ARGS = []string{
/*"--example-arg",*/
type handler struct {
}
var PREFS = `user_pref("privacy.firstparty.isolate", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable First Party Isolation (FPI) - higly suggested to set this to true- IF DISABLING FPI, READ RELEVANT SECTIONS OF USER.JS!
user_pref("privacy.resistFingerprinting", true); // [SET] [SAFE=false] [!PRIV=true] whether to enable Firefox built-in ability to resist fingerprinting by web servers (used to uniquely identify the browser)) - higly suggested to set this to true
user_pref("privacy.resistFingerprinting.letterboxing", true); // [SET] [!PRIV=true] whether to set the viewport size to a generic dimension in order to resist fingerprinting) - suggested to set this to true, however doing so may make the viewport smaller than the window
user_pref("browser.display.use_document_fonts", 0); // [SET] [SAFE=1] [!PRIV=0] whether to allow websites to use fonts they specify - 0=no, 1=yes - setting this to 0 will uglify many websites - value can be easily flipped with the Toggle Fonts add-on
user_pref("browser.download.forbid_open_with", true); // whether to allow the 'open with' option when downloading a file
user_pref("browser.library.activity-stream.enabled", false); // whether to enable Activity Stream recent Highlights in the Library`
var userdir = "./i2pfox"
func writeExtension(val os.FileInfo, system *fs) {
if len(val.Name()) > 3 {
if !val.IsDir() {
file, err := system.Open(val.Name())
if err != nil {
log.Fatal(err.Error())
}
sys := bytes.NewBuffer(nil)
if _, err := io.Copy(sys, file); err != nil {
log.Fatal(err.Error())
}
log.Println(val.Name()[len(val.Name())-3:], "== xpi")
if val.Name()[len(val.Name())-3:] == "xpi" {
extension := userdir + "/extensions/" + val.Name()
if _, err := os.Stat(extension); !os.IsNotExist(err) {
os.Remove(extension)
}
if err := ioutil.WriteFile(extension, sys.Bytes(), val.Mode()); err == nil {
ARGS = append(ARGS, extension)
log.Println("wrote", extension)
} else {
log.Fatal(err)
}
} else {
log.Println("'"+userdir+"/"+val.Name()+"'", "ignored")
}
func (h *handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "hello\n")
/*In the future, we may use this as a sort of loopback for privately testing the browser
fingerprint. At first this will be 100% user-initiated, but it may be useful to query such
a service periodically, in order to inform the user when a fingerprint change has occurred
and prompt them to potentially re-set their browser to it's original state.
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
} else {
log.Println("'"+userdir+"/"+val.Name()+"'", "ignored", "contents", val.Sys())
}
}*/
}
func writeProfile(FS *fs) {
if embedded, err := FS.Readdir(-1); err != nil {
log.Fatal("Extension error, embedded extension not read.", err)
} else {
os.MkdirAll(userdir+"/extensions", 0755)
for _, val := range embedded {
if val.IsDir() {
os.MkdirAll(userdir+"/"+val.Name(), val.Mode())
} else {
writeExtension(val, FS)
}
func hello() error {
server := &http.Server{Addr: "localhost:", Handler: &handler{}}
go func() {
if err := server.ListenAndServe(); err != nil {
log.Println(err)
}
}()
// Setting up signal capturing
// stop := make(chan os.Signal, 1)
// signal.Notify(stop, os.Interrupt)
// Waiting for SIGINT (pkill -2)
// <-stop
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Println(err)
}
return nil
}
func proxyCheck() bool {
conn, err := net.Dial("tcp4", "localhost:4444")
log.Println("Doing dial check")
if err != nil {
return false
}
log.Println("Dial check true, proxy is up")
defer conn.Close()
return true
}
func main() {
if ok, err := checki2p.ConditionallyLaunchI2P(); ok {
if err != nil {
log.Fatal(err)
if err := hello(); err != nil {
log.Fatal(err)
}
chromium := flag.Bool("chromium", false, "use a chromium-based browser instead of a firefox-based browser.")
flag.Parse()
ARGS = append(ARGS, flag.Args()...)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if runtime.GOOS == "linux" {
if !*chromium {
if err := UnpackTBZ(GingerDir); err != nil {
log.Fatal("Error unpacking embedded browser")
} else {
os.Setenv("FIREFOX_BIN", filepath.Join(GingerDir, "gingershrew", "gingershrew"))
}
}
} else {
log.Fatal("Undefined I2P launching error")
}
writeProfile(FS)
prefs := userdir + "/user.js"
if _, err := os.Stat(prefs); os.IsNotExist(err) {
if err := ioutil.WriteFile(prefs, []byte(PREFS), 0644); err == nil {
log.Println("wrote", prefs)
} else {
log.Fatal(err)
if LocateFirefox() == "" {
*chromium = true
}
}
FIREFOX, ERROR := SecureExtendedFirefox(userdir, false, EXTENSIONS, EXTENSIONHASHES, ARGS...)
if ERROR != nil {
log.Fatal(ERROR)
if err := WriteI2CPConf(); err != nil {
log.Println(err)
}
if err := zerobundle.ZeroMain(); err != nil {
log.Println(err)
}
time.Sleep(time.Second * 2)
if !proxyCheck() {
go proxyMain(ctx)
}
if !*chromium {
firefoxMain()
} else {
chromiumMain()
}
defer FIREFOX.Close()
<-FIREFOX.Done()
}

1
sum Normal file
View File

@@ -0,0 +1 @@
28d475b59554cf62a6b787687c49f29b493b5f02b434630fadbf5e776eb0a123 i2pfirefox-darwin

10
sums Normal file
View File

@@ -0,0 +1,10 @@
go run -a -tags netgo -ldflags '-w -extldflags "-static"' -tags generate gen.go extensions.go
sha256sum ifox/i2ppb@eyedeekay.github.io.xpi
f7eb75e5c41d94b593fa71cb839d07c14e9517f5fa1cb440f8a798df2bb08e17 ifox/i2ppb@eyedeekay.github.io.xpi
sha256sum 'ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi'
f53f00ec9e689c7ddb4aaeec56bf50e61161ce7fbaaf2d2b49032c4c648120a2 ifox/{b11bea1f-a888-4332-8d8a-cec2be7d24b9}.xpi
sha256sum ifox/uBlock0@raymondhill.net.xpi
997aac00064665641298047534c9392492ef09f0cbf177b6a30d4fa288081579 ifox/uBlock0@raymondhill.net.xpi
sha256sum ifox/uMatrix@raymondhill.net.xpi
991f0fa5c64172b8a2bc0a010af60743eba1c18078c490348e1c6631882cbfc7 ifox/uMatrix@raymondhill.net.xpi
#sha256sum 'ifox/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi'