From 0296f677605fbc926fb1a12835b099d346ba7029 Mon Sep 17 00:00:00 2001 From: Alec Soltzen <83119415+soltzen@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:50:45 +0200 Subject: [PATCH 1/5] [chained|proxyimpl] Move protocol implementations to proxyimpl --- chained/chained_test.go | 23 +- chained/common.go | 166 ------------- chained/common_test.go | 41 ---- chained/dialer.go | 25 +- chained/doc.go | 9 + chained/http_impl.go | 21 -- chained/https_impl.go | 96 -------- chained/kcp_impl.go | 38 --- chained/overhead.go | 10 - chained/persist.go | 8 +- chained/proxy.go | 158 +++---------- chained/ratetracking_test.go | 3 +- client/client.go | 7 +- client/handler.go | 9 +- common/nopcloser.go | 5 + ios/ios.go | 3 +- ios/memory.go | 4 +- ios/thread_limiting_conn.go | 2 +- ios/udp.go | 6 +- prober/prober.go | 5 +- proxyimpl/common.go | 223 ++++++++++++++++++ proxyimpl/common_test.go | 56 +++++ proxyimpl/dialer.go | 11 + proxyimpl/doc.go | 7 + {chained => proxyimpl}/hello_roller.go | 2 +- proxyimpl/http.go | 36 +++ chained/tls_config.go => proxyimpl/https.go | 143 +++++++---- .../lampshade.go | 11 +- {chained => proxyimpl}/multipath.go | 41 ++-- .../multiplexed.go | 10 +- chained/obfs4_impl.go => proxyimpl/obfs4.go | 9 +- .../preconnecting_dialer.go | 24 +- .../preconnecting_dialer_test.go | 28 +-- proxyimpl/proxyimpl.go | 112 +++++++++ chained/quic_impl.go => proxyimpl/quic.go | 12 +- {chained => proxyimpl}/session_caching.go | 2 +- .../session_caching_test.go | 2 +- .../shadowsocks.go | 21 +- .../shadowsocks_test.go | 2 +- .../starbridge.go | 11 +- proxyimpl/testutils.go | 18 ++ proxyimpl/tls_config.go | 39 +++ {chained => proxyimpl}/tls_config_ios.go | 2 +- {chained => proxyimpl}/tls_config_other.go | 4 +- {chained => proxyimpl}/tls_file_cache.go | 2 +- {chained => proxyimpl}/tls_file_cache_test.go | 2 +- .../tlsmasq_impl.go => proxyimpl/tlsmasq.go | 10 +- {chained => proxyimpl}/utp_disabled.go | 2 +- {chained => proxyimpl}/utp_enabled.go | 2 +- chained/wss_impl.go => proxyimpl/wss.go | 14 +- 50 files changed, 782 insertions(+), 715 deletions(-) create mode 100644 chained/doc.go delete mode 100644 chained/http_impl.go delete mode 100644 chained/https_impl.go delete mode 100644 chained/kcp_impl.go create mode 100644 common/nopcloser.go create mode 100644 proxyimpl/common.go create mode 100644 proxyimpl/common_test.go create mode 100644 proxyimpl/dialer.go create mode 100644 proxyimpl/doc.go rename {chained => proxyimpl}/hello_roller.go (99%) create mode 100644 proxyimpl/http.go rename chained/tls_config.go => proxyimpl/https.go (64%) rename chained/lampshade_impl.go => proxyimpl/lampshade.go (94%) rename {chained => proxyimpl}/multipath.go (63%) rename chained/multiplexed_impl.go => proxyimpl/multiplexed.go (93%) rename chained/obfs4_impl.go => proxyimpl/obfs4.go (88%) rename {chained => proxyimpl}/preconnecting_dialer.go (85%) rename {chained => proxyimpl}/preconnecting_dialer_test.go (87%) create mode 100644 proxyimpl/proxyimpl.go rename chained/quic_impl.go => proxyimpl/quic.go (86%) rename {chained => proxyimpl}/session_caching.go (99%) rename {chained => proxyimpl}/session_caching_test.go (98%) rename chained/shadowsocks_impl.go => proxyimpl/shadowsocks.go (90%) rename chained/shadowsocks_impl_test.go => proxyimpl/shadowsocks_test.go (98%) rename chained/starbridge_impl.go => proxyimpl/starbridge.go (92%) create mode 100644 proxyimpl/testutils.go create mode 100644 proxyimpl/tls_config.go rename {chained => proxyimpl}/tls_config_ios.go (92%) rename {chained => proxyimpl}/tls_config_other.go (94%) rename {chained => proxyimpl}/tls_file_cache.go (99%) rename {chained => proxyimpl}/tls_file_cache_test.go (99%) rename chained/tlsmasq_impl.go => proxyimpl/tlsmasq.go (96%) rename {chained => proxyimpl}/utp_disabled.go (92%) rename {chained => proxyimpl}/utp_enabled.go (96%) rename chained/wss_impl.go => proxyimpl/wss.go (91%) diff --git a/chained/chained_test.go b/chained/chained_test.go index bac4612f1..410778cff 100644 --- a/chained/chained_test.go +++ b/chained/chained_test.go @@ -17,6 +17,7 @@ import ( "github.com/getlantern/common/config" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/golog" ) @@ -42,15 +43,6 @@ func newTestUserConfig() *common.UserConfigData { return common.NewUserConfigData(common.DefaultAppName, "device", 1234, "protoken", nil, "en-US") } -type testImpl struct { - nopCloser - d func(ctx context.Context) (net.Conn, error) -} - -func (impl *testImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { - return impl.d(ctx) -} - func newDialer(dialServer func(ctx context.Context) (net.Conn, error)) (func(network, addr string) (net.Conn, error), error) { p, err := newProxy("test", "addr:567", "proto", "netw", &config.ProxyConfig{ AuthToken: "token", @@ -64,7 +56,7 @@ func newDialer(dialServer func(ctx context.Context) (net.Conn, error)) (func(net if err != nil { return nil, err } - p.impl = &testImpl{d: dialServer} + p.impl = &proxyimpl.TestImpl{DialServerFunc: dialServer} return p.dial, nil } @@ -160,7 +152,7 @@ func TestBadAddressToServer(t *testing.T) { if !assert.NoError(t, err) { return } - p.impl = &testImpl{d: func(ctx context.Context) (net.Conn, error) { + p.impl = &proxyimpl.TestImpl{DialServerFunc: func(ctx context.Context) (net.Conn, error) { return nil, fmt.Errorf("fail intentionally") }} l := startServer(t) @@ -277,15 +269,8 @@ func test(t *testing.T, dialer func(network, addr string) (net.Conn, error)) { } func (p *proxy) dial(network, addr string) (net.Conn, error) { - ctx, cancel := context.WithTimeout(context.Background(), chainedDialTimeout) + ctx, cancel := context.WithTimeout(context.Background(), proxyimpl.ChainedDialTimeout) defer cancel() conn, _, err := p.DialContext(ctx, network, addr) return conn, err } - -func TestCiphersFromNames(t *testing.T) { - assert.Nil(t, ciphersFromNames(nil)) - assert.Nil(t, ciphersFromNames([]string{})) - assert.Nil(t, ciphersFromNames([]string{"UNKNOWN"})) - assert.EqualValues(t, []uint16{0x0035, 0x003c}, ciphersFromNames([]string{"TLS_RSA_WITH_AES_256_CBC_SHA", "UNKNOWN", "TLS_RSA_WITH_AES_128_CBC_SHA256"})) -} diff --git a/chained/common.go b/chained/common.go index 00620b603..0d62def1a 100644 --- a/chained/common.go +++ b/chained/common.go @@ -6,11 +6,8 @@ package chained import ( - "strconv" - "github.com/getlantern/common/config" "github.com/getlantern/golog" - tls "github.com/refraction-networking/utls" "google.golang.org/protobuf/proto" ) @@ -30,166 +27,3 @@ func CopyConfigs(proxies map[string]*config.ProxyConfig) map[string]*config.Prox func CopyConfig(pc *config.ProxyConfig) *config.ProxyConfig { return proto.Clone(pc).(*config.ProxyConfig) } - -func _setting(settings map[string]string, name string) string { - if settings == nil { - return "" - } - return settings[name] -} - -func _settingInt(settings map[string]string, name string) int { - _val := _setting(settings, name) - if _val == "" { - return 0 - } - val, err := strconv.Atoi(_val) - if err != nil { - log.Errorf("Setting %v: %v is not an int", name, _val) - return 0 - } - return val -} - -func _settingFloat(settings map[string]string, name string) float64 { - _val := _setting(settings, name) - if _val == "" { - return 0.0 - } - val, err := strconv.ParseFloat(_val, 64) - if err != nil { - log.Errorf("Setting %v: %v is not a float", name, _val) - return 0.0 - } - return val -} - -func _settingBool(settings map[string]string, name string) bool { - _val := _setting(settings, name) - if _val == "" { - return false - } - val, err := strconv.ParseBool(_val) - if err != nil { - log.Errorf("Setting %v: %v is not a boolean", name, _val) - return false - } - return val -} - -func ptSetting(pc *config.ProxyConfig, name string) string { - return _setting(pc.PluggableTransportSettings, name) -} - -func ptSettingInt(pc *config.ProxyConfig, name string) int { - return _settingInt(pc.PluggableTransportSettings, name) -} - -func ptSettingBool(pc *config.ProxyConfig, name string) bool { - return _settingBool(pc.PluggableTransportSettings, name) -} - -func ptSettingFloat(pc *config.ProxyConfig, name string) float64 { - return _settingFloat(pc.PluggableTransportSettings, name) -} - -func muxSetting(pc *config.ProxyConfig, name string) string { - return _setting(pc.MultiplexedSettings, name) -} - -func muxSettingInt(pc *config.ProxyConfig, name string) int { - return _settingInt(pc.MultiplexedSettings, name) -} - -func muxSettingBool(pc *config.ProxyConfig, name string) bool { - return _settingBool(pc.MultiplexedSettings, name) -} - -func muxSettingFloat(pc *config.ProxyConfig, name string) float64 { - return _settingFloat(pc.MultiplexedSettings, name) -} - -func desktopOrderedCipherSuites(pc *config.ProxyConfig) []uint16 { - return ciphersFromNames(pc.TLSDesktopOrderedCipherSuiteNames) -} - -func mobileOrderedCipherSuites(pc *config.ProxyConfig) []uint16 { - return ciphersFromNames(pc.TLSMobileOrderedCipherSuiteNames) -} - -func ciphersFromNames(cipherNames []string) []uint16 { - var ciphers []uint16 - - for _, cipherName := range cipherNames { - cipher, found := availableTLSCiphers[cipherName] - if !found { - log.Errorf("Unknown cipher: %v", cipherName) - continue - } - ciphers = append(ciphers, cipher) - } - - return ciphers -} - -func clientHelloID(pc *config.ProxyConfig) tls.ClientHelloID { - chid := availableClientHelloIDs[pc.TLSClientHelloID] - if chid.Client == "" { - chid = tls.HelloGolang - } - return chid -} - -var availableTLSCiphers = map[string]uint16{ - "TLS_RSA_WITH_RC4_128_SHA": tls.TLS_RSA_WITH_RC4_128_SHA, - "TLS_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, - "TLS_RSA_WITH_AES_128_CBC_SHA": tls.TLS_RSA_WITH_AES_128_CBC_SHA, - "TLS_RSA_WITH_AES_256_CBC_SHA": tls.TLS_RSA_WITH_AES_256_CBC_SHA, - "TLS_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_RSA_WITH_AES_128_CBC_SHA256, - "TLS_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_RSA_WITH_AES_128_GCM_SHA256, - "TLS_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_RSA_WITH_AES_256_GCM_SHA384, - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - "TLS_ECDHE_RSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, - "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, -} - -// helloBrowser is a special hello ID denoting that ClientHellos should be based on those used by -// the system default browser. This structure does not actually get passed to utls code. It is -// caught by tlsConfigForProxy and converted to tls.HelloCustom with a proper corresponding -// ClientHelloSpec. -var helloBrowser = tls.ClientHelloID{ - Client: "Browser", - Version: "0", -} - -var availableClientHelloIDs = map[string]tls.ClientHelloID{ - "HelloGolang": tls.HelloGolang, - "HelloRandomized": tls.HelloRandomized, - "HelloRandomizedALPN": tls.HelloRandomizedALPN, - "HelloRandomizedNoALPN": tls.HelloRandomizedNoALPN, - "HelloFirefox_Auto": tls.HelloFirefox_Auto, - "HelloFirefox_55": tls.HelloFirefox_55, - "HelloFirefox_56": tls.HelloFirefox_56, - "HelloFirefox_105": tls.HelloFirefox_105, - "HelloChrome_Auto": tls.HelloChrome_Auto, - "HelloChrome_58": tls.HelloChrome_58, - "HelloChrome_62": tls.HelloChrome_62, - "HelloChrome_106": tls.HelloChrome_106, - "HelloEdge_Auto": tls.HelloEdge_Auto, - "Hello360_Auto": tls.Hello360_Auto, - "HelloQQ_Auto": tls.HelloQQ_Auto, - "HelloQQ_11": tls.HelloQQ_11_1, - "HelloBrowser": helloBrowser, -} diff --git a/chained/common_test.go b/chained/common_test.go index 65d937941..2fcc5ec95 100644 --- a/chained/common_test.go +++ b/chained/common_test.go @@ -43,44 +43,3 @@ func TestCopyConfigs(t *testing.T) { assert.True(t, proto.Equal(proxies["pc1"], CopyConfigs(proxies)["pc1"])) assert.True(t, proto.Equal(proxies["pc2"], CopyConfigs(proxies)["pc2"])) } - -func TestPTSettingsNil(t *testing.T) { - s := &config.ProxyConfig{} - assert.False(t, ptSettingBool(s, "bool")) -} - -func TestPTSettings(t *testing.T) { - s := &config.ProxyConfig{ - PluggableTransportSettings: map[string]string{ - "true": "true", - "false": "false", - "empty": "", - "2": "2", - "falsestring": "false", - "truestring": "true", - "2string": "2", - - "badint": "notint", - "badbool": "notbool", - }, - } - assert.True(t, ptSettingBool(s, "true")) - assert.False(t, ptSettingBool(s, "false")) - assert.False(t, ptSettingBool(s, "empty")) - assert.False(t, ptSettingBool(s, "unknown")) - assert.False(t, ptSettingBool(s, "2")) - assert.Equal(t, 2, ptSettingInt(s, "2")) - assert.Equal(t, 0, ptSettingInt(s, "empty")) - assert.Equal(t, 0, ptSettingInt(s, "unknown")) - assert.Equal(t, 0, ptSettingInt(s, "false")) - - assert.False(t, ptSettingBool(s, "falsestring")) - assert.True(t, ptSettingBool(s, "truestring")) - assert.Equal(t, 2, ptSettingInt(s, "2string")) - - assert.Equal(t, 0, ptSettingInt(s, "badint")) - assert.False(t, ptSettingBool(s, "badbool")) - - assert.Equal(t, "", ptSetting(s, "empty")) - assert.Equal(t, "2", ptSetting(s, "2")) -} diff --git a/chained/dialer.go b/chained/dialer.go index 088a4211d..2bfa1a6fe 100644 --- a/chained/dialer.go +++ b/chained/dialer.go @@ -25,22 +25,10 @@ import ( "github.com/getlantern/flashlight/bandwidth" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" -) - -const ( - minCheckInterval = 10 * time.Second - maxCheckInterval = 15 * time.Minute - dialCoreCheckInterval = 30 * time.Second + "github.com/getlantern/flashlight/proxyimpl" ) var ( - // IdleTimeout closes connections idle for a period to avoid dangling - // connections. Web applications tend to contact servers in 1 minute - // interval or below. 65 seconds is long enough to avoid interrupt normal - // connections but shorter than the idle timeout on the server to avoid - // running into closed connection problems. - IdleTimeout = 65 * time.Second - // errUpstream is an error that indicates there was a problem upstream of a // proxy. Such errors are not counted as failures but do allow failover to // other proxies. @@ -51,7 +39,7 @@ func (p *proxy) Stop() { log.Tracef("Stopping dialer %s", p.Label()) p.closeOnce.Do(func() { close(p.closeCh) - p.impl.close() + p.impl.Close() }) } @@ -111,13 +99,17 @@ func (p *proxy) WriteStats(w io.Writer) { estRTT*1000, estBandwidth, humanize.Bytes(p.DataSent()), humanize.Bytes(p.DataRecv()), probeSuccesses, probeSuccessKBs, probeFailures, probeFailedKBs) - if impl, ok := p.impl.(*multipathImpl); ok { + if impl, ok := p.impl.(*proxyimpl.MultipathImpl); ok { for _, line := range impl.FormatStats() { _, _ = fmt.Fprintf(w, "\t%s\n", line) } } } +func (p *proxy) Implementation() proxyimpl.ProxyImpl { + return p.impl +} + // DialContext dials using provided context func (p *proxy) DialContext(ctx context.Context, network, addr string) (conn net.Conn, isUpstreamError bool, err error) { op := ops.Begin("dial_for_balancer"). @@ -164,7 +156,6 @@ func (p *proxy) MarkFailure() { atomic.StoreInt64(&p.consecSuccesses, 0) newCF := atomic.AddInt64(&p.consecFailures, 1) log.Tracef("Dialer %s consecutive failures: %d -> %d", p.Label(), newCF-1, newCF) - return } // defaultDialOrigin implements the method from serverConn. With standard proxies, this @@ -172,7 +163,7 @@ func (p *proxy) MarkFailure() { // persistent connection to the upstream proxy. func defaultDialOrigin(op *ops.Op, ctx context.Context, p *proxy, network, addr string) (net.Conn, error) { conn, err := p.reportedDial(func(op *ops.Op) (net.Conn, error) { - return p.impl.dialServer(op, ctx) + return p.impl.DialServer(op, ctx) }) if err != nil { log.Debugf("Unable to dial server %v: %s", p.Label(), err) diff --git a/chained/doc.go b/chained/doc.go new file mode 100644 index 000000000..553c807d9 --- /dev/null +++ b/chained/doc.go @@ -0,0 +1,9 @@ +// chained package handles dialing to Lantern proxies. It contain code for +// representing proxies, sending them CONNECT requests, wrapping different +// net.Conn implementationsm etc. +// +// It mainly uses two packages for doing this: +// - balancer: for load balancing proxies +// - proxyimpl: for handling different protocol transports (e.g., QUIC, +// http/https, lampshade, obfs4, etc.) +package chained diff --git a/chained/http_impl.go b/chained/http_impl.go deleted file mode 100644 index eb11ee497..000000000 --- a/chained/http_impl.go +++ /dev/null @@ -1,21 +0,0 @@ -package chained - -import ( - "context" - "net" - - "github.com/getlantern/flashlight/ops" -) - -type httpImpl struct { - nopCloser - dialCore coreDialer - addr string -} - -func newHTTPImpl(addr string, dialCore coreDialer) proxyImpl { - return &httpImpl{addr: addr, dialCore: dialCore} -} -func (impl *httpImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { - return impl.dialCore(op, ctx, impl.addr) -} diff --git a/chained/https_impl.go b/chained/https_impl.go deleted file mode 100644 index 13795961c..000000000 --- a/chained/https_impl.go +++ /dev/null @@ -1,96 +0,0 @@ -package chained - -import ( - "context" - "net" - "sync" - "time" - - tls "github.com/refraction-networking/utls" - - "github.com/getlantern/common/config" - "github.com/getlantern/errors" - "github.com/getlantern/flashlight/common" - "github.com/getlantern/flashlight/ops" - "github.com/getlantern/hellosplitter" - "github.com/getlantern/tlsdialer/v3" -) - -type httpsImpl struct { - nopCloser - dialCore coreDialer - addr string - tlsConfig *tls.Config - roller *helloRoller - tlsClientHelloSplitting bool - sync.Mutex -} - -func newHTTPSImpl(configDir, name, addr string, pc *config.ProxyConfig, uc common.UserConfig, dialCore coreDialer) (proxyImpl, error) { - const timeout = 5 * time.Second - - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - - tlsConfig, hellos, err := tlsConfigForProxy(ctx, configDir, name, pc, uc) - if err != nil { - return nil, log.Error(errors.Wrap(err).With("addr", addr)) - } - if len(hellos) == 0 { - return nil, log.Error(errors.New("expected at least one hello")) - } - return &httpsImpl{ - dialCore: dialCore, - addr: addr, - tlsConfig: tlsConfig, - roller: &helloRoller{hellos: hellos}, - tlsClientHelloSplitting: pc.TLSClientHelloSplitting, - }, nil -} - -func (impl *httpsImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { - r := impl.roller.getCopy() - defer impl.roller.updateTo(r) - - currentHello := r.current() - helloID, helloSpec, err := currentHello.utlsSpec() - if err != nil { - log.Debugf("failed to generate valid utls hello spec; advancing roller: %v", err) - r.advance() - return nil, errors.New("failed to generate valid utls hello spec: %v", err) - } - d := tlsdialer.Dialer{ - DoDial: func(network, addr string, timeout time.Duration) (net.Conn, error) { - tcpConn, err := impl.dialCore(op, ctx, impl.addr) - if err != nil { - return nil, err - } - if impl.tlsClientHelloSplitting { - tcpConn = hellosplitter.Wrap(tcpConn, splitClientHello) - } - return tcpConn, err - }, - Timeout: timeoutFor(ctx), - SendServerName: impl.tlsConfig.ServerName != "", - Config: impl.tlsConfig.Clone(), - ClientHelloID: helloID, - ClientHelloSpec: helloSpec, - } - result, err := d.DialForTimings("tcp", impl.addr) - if err != nil { - if isHelloErr(err) { - log.Debugf("got error likely related to bad hello; advancing roller: %v", err) - r.advance() - } - return nil, err - } - return result.Conn, nil -} - -func timeoutFor(ctx context.Context) time.Duration { - deadline, ok := ctx.Deadline() - if ok { - return deadline.Sub(time.Now()) - } - return chainedDialTimeout -} diff --git a/chained/kcp_impl.go b/chained/kcp_impl.go deleted file mode 100644 index c050ea546..000000000 --- a/chained/kcp_impl.go +++ /dev/null @@ -1,38 +0,0 @@ -//go:build !ios - -package chained - -import ( - "context" - "net" - - "github.com/getlantern/common/config" - "github.com/getlantern/errors" - "github.com/getlantern/kcpwrapper" - - "github.com/getlantern/flashlight/ops" -) - -// KCPConfig adapts kcpwrapper.DialerConfig to the currently deployed -// configurations in order to provide backward-compatibility. -type KCPConfig struct { - kcpwrapper.DialerConfig `mapstructure:",squash"` - RemoteAddr string `json:"remoteaddr"` -} - -type kcpImpl struct { - nopCloser - reportDialCore reportDialCoreFn - addr string - dialKCP func(ctx context.Context, addr string) (net.Conn, error) -} - -func newKCPImpl(pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { - return nil, errors.New("KCP not supported") -} - -func (impl *kcpImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { - return impl.reportDialCore(op, func() (net.Conn, error) { - return impl.dialKCP(ctx, impl.addr) - }) -} diff --git a/chained/overhead.go b/chained/overhead.go index 2c58604f1..691d5767d 100644 --- a/chained/overhead.go +++ b/chained/overhead.go @@ -24,16 +24,6 @@ func init() { }() } -func overheadDialer(app bool, dial func(network, addr string, timeout time.Duration) (net.Conn, error)) func(network, addr string, timeout time.Duration) (net.Conn, error) { - return func(network, addr string, timeout time.Duration) (net.Conn, error) { - return dialOverhead(network, addr, timeout, app, dial) - } -} - -func dialOverhead(network, addr string, timeout time.Duration, app bool, dial func(network, addr string, timeout time.Duration) (net.Conn, error)) (net.Conn, error) { - return overheadWrapper(app)(dial(network, addr, timeout)) -} - func overheadWrapper(app bool) func(net.Conn, error) (net.Conn, error) { return func(conn net.Conn, err error) (net.Conn, error) { if conn == nil || err != nil { diff --git a/chained/persist.go b/chained/persist.go index 1e2751713..0f544f81b 100644 --- a/chained/persist.go +++ b/chained/persist.go @@ -32,9 +32,7 @@ func TrackStatsFor(dialers []balancer.Dialer, configDir string, probeIfNecessary } statsTrackingDialers = make([]balancer.Dialer, 0, len(dialers)) - for _, d := range dialers { - statsTrackingDialers = append(statsTrackingDialers, d) - } + statsTrackingDialers = append(statsTrackingDialers, dialers...) statsMx.Unlock() @@ -161,9 +159,7 @@ func persistStats(statsFilePath string) { time.Sleep(15 * time.Second) statsMx.Lock() dialers := make([]balancer.Dialer, 0, len(statsTrackingDialers)) - for _, d := range statsTrackingDialers { - dialers = append(dialers, d) - } + dialers = append(dialers, statsTrackingDialers...) statsMx.Unlock() doPersistStats(statsFilePath, dialers) } diff --git a/chained/proxy.go b/chained/proxy.go index d23be26cf..8d990d29a 100644 --- a/chained/proxy.go +++ b/chained/proxy.go @@ -3,8 +3,6 @@ package chained import ( "context" "fmt" - "io" - "math/rand" "net" "net/http" "strconv" @@ -24,10 +22,10 @@ import ( "github.com/getlantern/flashlight/balancer" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/fronted" "github.com/getlantern/idletiming" "github.com/getlantern/mtime" - "github.com/getlantern/netx" ) const ( @@ -39,39 +37,17 @@ const ( rttDevK = 2 // Estimated RTT = mean RTT + 2 * deviation successRateAlpha = 0.7 // See example_ema_success_rate_test.go - - defaultMultiplexedPhysicalConns = 1 ) // InsecureSkipVerifyTLSMasqOrigin controls whether the origin certificate is verified when dialing // a tlsmasq proxy. This can be used when testing against origins with self-signed certificates. // This should be false in production as allowing a 3rd party to impersonate the origin could allow // for a kind of probe. -var InsecureSkipVerifyTLSMasqOrigin = false var ( - chainedDialTimeout = 1 * time.Minute theForceAddr, theForceToken string - - tlsKeyLogWriter io.Writer - createKeyLogWriterOnce sync.Once ) -// proxyImpl is the interface to hide the details of client side logic for -// different types of pluggable transports. -type proxyImpl interface { - // dialServer is to establish connection to the proxy server to the point - // of being able to transfer application data. - dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) - // close releases the resources associated with the implementation, if any. - close() -} - -// nopCloser is a mixin to implement a do-nothing close() method of proxyImpl. -type nopCloser struct{} - -func (c nopCloser) close() {} - // CreateDialers creates a list of Proxies (balancer.Dialer) with supplied server info. func CreateDialers(configDir string, proxies map[string]*config.ProxyConfig, uc common.UserConfig) []balancer.Dialer { return lo.Values(CreateDialersMap(configDir, proxies, uc)) @@ -80,7 +56,7 @@ func CreateDialers(configDir string, proxies map[string]*config.ProxyConfig, uc // CreateDialersMap creates a map of Proxies (balancer.Dialer) with supplied server info. func CreateDialersMap(configDir string, proxies map[string]*config.ProxyConfig, uc common.UserConfig) map[string]balancer.Dialer { mappedDialers := make(map[string]balancer.Dialer) - groups := groupByMultipathEndpoint(proxies) + groups := proxyimpl.GroupByMultipathEndpoint(proxies) for endpoint, group := range groups { if endpoint == "" { log.Debugf("Adding %d individual chained servers", len(group)) @@ -95,12 +71,33 @@ func CreateDialersMap(configDir string, proxies map[string]*config.ProxyConfig, } } else { log.Debugf("Adding %d chained servers for multipath endpoint %s", len(group), endpoint) - dialer, err := CreateMPDialer(configDir, endpoint, group, uc) + + // Make a new proxy for the multipath endpoint using the info from + // the **first server** in the group. Those attributes should be shared + // by all paths + var err error + var p *proxy + for _, s := range proxies { + p, err = newProxy(endpoint, endpoint+":0", "multipath", "multipath", s, uc) + if err != nil { + log.Errorf("Unable to configure multipath server to %v. Received error: %v", endpoint, err) + continue + } + // Break after the first one + break + } + + // Make and assign a new MP dialer + p.impl, err = proxyimpl.NewMultipathProxyImpl( + configDir, endpoint, + group, uc, + extractParams, p.reportDialCore) if err != nil { log.Errorf("Unable to configure multipath server to %v. Received error: %v", endpoint, err) continue } - mappedDialers[endpoint] = dialer + + mappedDialers[endpoint] = p } } return mappedDialers @@ -113,9 +110,14 @@ func CreateDialer(configDir, name string, s *config.ProxyConfig, uc common.UserC return nil, err } p, err := newProxy(name, addr, transport, network, s, uc) - p.impl, err = createImpl(configDir, name, addr, transport, s, uc, p.reportDialCore) if err != nil { - return nil, err + return nil, fmt.Errorf("unable to configure chained server %v: %v", name, err) + } + p.impl, err = proxyimpl.New(configDir, name, addr, + transport, s, uc, p.reportDialCore) + if err != nil { + return nil, fmt.Errorf( + "Unable to configure proxy implementation for dialer [%v]. Received error: %v", name, err) } return p, nil } @@ -151,78 +153,6 @@ func extractParams(s *config.ProxyConfig) (addr, transport, network string, err return } -func createImpl(configDir, name, addr, transport string, s *config.ProxyConfig, uc common.UserConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { - coreDialer := func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) { - return reportDialCore(op, func() (net.Conn, error) { - return netx.DialContext(ctx, "tcp", addr) - }) - } - if strings.HasPrefix(transport, "utp") { - dialer, err := utpDialer() - if err != nil { - return nil, err - } - coreDialer = func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) { - return reportDialCore(op, func() (net.Conn, error) { - return dialer(ctx, addr) - }) - } - } - var impl proxyImpl - var err error - switch transport { - case "", "http", "https", "utphttp", "utphttps": - if s.Cert == "" { - log.Errorf("No Cert configured for %s, will dial with plain tcp", addr) - impl = newHTTPImpl(addr, coreDialer) - } else { - log.Tracef("Cert configured for %s, will dial with tls", addr) - impl, err = newHTTPSImpl(configDir, name, addr, s, uc, coreDialer) - } - case "obfs4", "utpobfs4": - impl, err = newOBFS4Impl(name, addr, s, coreDialer) - case "lampshade": - impl, err = newLampshadeImpl(name, addr, s, reportDialCore) - case "quic_ietf": - impl, err = newQUICImpl(name, addr, s, reportDialCore) - case "shadowsocks": - impl, err = newShadowsocksImpl(name, addr, s, reportDialCore) - case "wss": - impl, err = newWSSImpl(addr, s, reportDialCore) - case "tlsmasq": - impl, err = newTLSMasqImpl(configDir, name, addr, s, uc, reportDialCore) - case "starbridge": - impl, err = newStarbridgeImpl(name, addr, s, reportDialCore) - default: - err = errors.New("Unknown transport: %v", transport).With("addr", addr).With("plugabble-transport", transport) - } - if err != nil { - return nil, err - } - - allowPreconnecting := false - switch transport { - case "http", "https", "utphttp", "utphttps", "obfs4", "utpobfs4", "tlsmasq": - allowPreconnecting = true - } - - if s.MultiplexedAddr != "" || transport == "utphttp" || - transport == "utphttps" || transport == "utpobfs4" || - transport == "tlsmasq" || transport == "starbridge" { - impl, err = multiplexed(impl, name, s) - if err != nil { - return nil, err - } - } else if allowPreconnecting && s.MaxPreconnect > 0 { - log.Debugf("Enabling preconnecting for %v", name) - // give ourselves a large margin for making sure we're not using idled preconnected connections - expiration := IdleTimeout / 2 - impl = newPreconnectingDialer(name, int(s.MaxPreconnect), expiration, impl) - } - - return impl, err -} - // ForceProxy forces everything through the HTTP proxy at forceAddr using // forceToken. func ForceProxy(forceAddr string, forceToken string) { @@ -265,9 +195,6 @@ func (c *consecCounter) Get() int64 { return atomic.LoadInt64(&c.v) } -type coreDialer func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) - -type reportDialCoreFn func(op *ops.Op, dialCore func() (net.Conn, error)) (net.Conn, error) type dialOriginFn func(op *ops.Op, ctx context.Context, p *proxy, network, addr string) (net.Conn, error) type proxy struct { @@ -296,7 +223,7 @@ type proxy struct { user common.UserConfig trusted bool bias int - impl proxyImpl + impl proxyimpl.ProxyImpl dialOrigin dialOriginFn emaRTT *ema.EMA emaRTTDev *ema.EMA @@ -357,7 +284,7 @@ func newProxy(name, addr, protocol, network string, s *config.ProxyConfig, uc co dfConn, err := p.reportedDial(func(op *ops.Op) (net.Conn, error) { return dial(network, addr) }) dfConn, err = overheadWrapper(true)(dfConn, op.FailIf(err)) if err == nil { - dfConn = idletiming.Conn(dfConn, IdleTimeout, func() { + dfConn = idletiming.Conn(dfConn, proxyimpl.IdleTimeout, func() { log.Debug("enhttp connection idled") }) } @@ -557,20 +484,3 @@ func reportProxyDial(delta time.Duration, err error) { innerOp.End() } } - -func splitClientHello(hello []byte) [][]byte { - const minSplits, maxSplits = 2, 5 - var ( - maxLen = len(hello) / minSplits - splits = [][]byte{} - start = 0 - end = start + rand.Intn(maxLen) + 1 - ) - for end < len(hello) && len(splits) < maxSplits-1 { - splits = append(splits, hello[start:end]) - start = end - end = start + rand.Intn(maxLen) + 1 - } - splits = append(splits, hello[start:]) - return splits -} diff --git a/chained/ratetracking_test.go b/chained/ratetracking_test.go index bf623fab3..e3d49dadc 100644 --- a/chained/ratetracking_test.go +++ b/chained/ratetracking_test.go @@ -10,6 +10,7 @@ import ( borda "github.com/getlantern/borda/client" "github.com/getlantern/common/config" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/mockconn" "github.com/stretchr/testify/assert" ) @@ -34,7 +35,7 @@ func TestRateTracking(t *testing.T) { AuthToken: "token", Trusted: true, }, newTestUserConfig()) - p.impl = &testImpl{d: func(ctx context.Context) (net.Conn, error) { + p.impl = &proxyimpl.TestImpl{DialServerFunc: func(ctx context.Context) (net.Conn, error) { return sd.Dial("", "") }} diff --git a/client/client.go b/client/client.go index 1c6d61423..f3ac7b0d3 100644 --- a/client/client.go +++ b/client/client.go @@ -43,6 +43,7 @@ import ( "github.com/getlantern/flashlight/domainrouting" "github.com/getlantern/flashlight/geolookup" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/flashlight/stats" "github.com/getlantern/flashlight/status" ) @@ -223,7 +224,7 @@ func NewClient( DNSResolutionMapForDirectDialsEventual: eventual.NewValue(), } - keepAliveIdleTimeout := chained.IdleTimeout - 5*time.Second + keepAliveIdleTimeout := proxyimpl.IdleTimeout - 5*time.Second var mitmErr error client.proxy, mitmErr = proxy.New(&proxy.Opts{ @@ -482,7 +483,7 @@ func (client *Client) Configure(proxies map[string]*commonconfig.ProxyConfig) [] log.Error(err) return nil } - chained.PersistSessionStates(client.configDir) + proxyimpl.PersistSessionStates(client.configDir) chained.TrackStatsFor(dialers, client.configDir, client.allowProbes()) return dialers } @@ -832,7 +833,7 @@ func (client *Client) initBalancer(proxies map[string]*commonconfig.ProxyConfig) return nil, fmt.Errorf("No chained servers configured, not initializing balancer") } - chained.PersistSessionStates(client.configDir) + proxyimpl.PersistSessionStates(client.configDir) dialers := chained.CreateDialers(client.configDir, proxies, client.user) client.bal.Reset(dialers) diff --git a/client/handler.go b/client/handler.go index 8f2a868ea..9ff653274 100644 --- a/client/handler.go +++ b/client/handler.go @@ -5,7 +5,6 @@ import ( "context" "errors" "fmt" - "github.com/getlantern/flashlight/config" "io" "io/ioutil" "math/rand" @@ -15,13 +14,15 @@ import ( "strings" "time" + "github.com/getlantern/flashlight/config" + "github.com/getlantern/flashlight/proxyimpl" + "github.com/PuerkitoBio/goquery" "github.com/andybalholm/brotli" "github.com/getlantern/idletiming" "github.com/getlantern/proxy/v2/filters" - "github.com/getlantern/flashlight/chained" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" "github.com/getlantern/flashlight/pro" @@ -37,8 +38,8 @@ func (client *Client) handle(conn net.Conn) error { client.opsMap.put(conn, op) defer client.opsMap.delete(conn) // Use idletiming on client connections to make sure we don't get dangling server connections when clients disappear without our knowledge - conn = idletiming.Conn(conn, chained.IdleTimeout, func() { - log.Debugf("Client connection to %v idle for %v, closed", conn.RemoteAddr(), chained.IdleTimeout) + conn = idletiming.Conn(conn, proxyimpl.IdleTimeout, func() { + log.Debugf("Client connection to %v idle for %v, closed", conn.RemoteAddr(), proxyimpl.IdleTimeout) }) err := client.proxy.Handle(context.Background(), conn, conn) if err != nil { diff --git a/common/nopcloser.go b/common/nopcloser.go new file mode 100644 index 000000000..ca0d67a05 --- /dev/null +++ b/common/nopcloser.go @@ -0,0 +1,5 @@ +package common + +type NopCloser struct{} + +func (NopCloser) Close() {} diff --git a/ios/ios.go b/ios/ios.go index 5f3b898b9..2942dcbb5 100644 --- a/ios/ios.go +++ b/ios/ios.go @@ -20,6 +20,7 @@ import ( "github.com/getlantern/flashlight/buffers" "github.com/getlantern/flashlight/chained" "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/proxyimpl" ) const ( @@ -270,7 +271,7 @@ func (c *client) loadUserConfig() error { func (c *client) loadDialers() ([]balancer.Dialer, error) { cf := &configurer{configFolderPath: c.configDir} - chained.PersistSessionStates(c.configDir) + proxyimpl.PersistSessionStates(c.configDir) proxies := make(map[string]*config.ProxyConfig) _, _, err := cf.openConfig(proxiesYaml, proxies, []byte{}) diff --git a/ios/memory.go b/ios/memory.go index 30c17250b..c0f398f28 100644 --- a/ios/memory.go +++ b/ios/memory.go @@ -13,7 +13,7 @@ import ( "time" "github.com/dustin/go-humanize" - "github.com/getlantern/flashlight/chained" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/netx" ) @@ -57,7 +57,7 @@ func (c *client) optimizeMemoryUsage() { runtime.GOMAXPROCS(1) // MEMORY_OPTIMIZATION - set very aggressive IdleTimeout to help deal with memory constraints on iOS - chained.IdleTimeout = shortIdleTimeout + proxyimpl.IdleTimeout = shortIdleTimeout // MEMORY_OPTIMIZATION - set an aggressive target for triggering GC after new allocations reach 20% of heap debug.SetGCPercent(20) diff --git a/ios/thread_limiting_conn.go b/ios/thread_limiting_conn.go index 09c58626c..d2e2ef752 100644 --- a/ios/thread_limiting_conn.go +++ b/ios/thread_limiting_conn.go @@ -91,7 +91,7 @@ func (c *threadLimitingUDPConn) WriteFrom(b []byte, addr *net.UDPAddr) (int, err writeResult := make(chan *safechannels.IOResult) c.writeWorker.tasks <- func() { n, err := c.UDPConn.WriteFrom(b, addr) - writeResult <- &safechannels.IOResult{n, err} + writeResult <- &safechannels.IOResult{N: n, Err: err} } result := <-writeResult return result.N, result.Err diff --git a/ios/udp.go b/ios/udp.go index 1b7ccfdc6..1dfe2c0f1 100644 --- a/ios/udp.go +++ b/ios/udp.go @@ -9,7 +9,7 @@ import ( "github.com/eycorsican/go-tun2socks/core" "github.com/getlantern/dnsgrab" - "github.com/getlantern/flashlight/chained" + "github.com/getlantern/flashlight/proxyimpl" ) // UDPDialer provides a mechanism for dialing outbound UDP connections that bypass the VPN. @@ -87,12 +87,12 @@ func (cb *UDPCallbacks) OnWritten() { } func (cb *UDPCallbacks) idleTiming() { - t := time.NewTimer(chained.IdleTimeout) + t := time.NewTimer(proxyimpl.IdleTimeout) resetTimer := func() { if !t.Stop() { <-t.C } - next := time.Duration(chained.IdleTimeout) + next := time.Duration(proxyimpl.IdleTimeout) t.Reset(next) } diff --git a/prober/prober.go b/prober/prober.go index 4e35d848e..89382c62d 100644 --- a/prober/prober.go +++ b/prober/prober.go @@ -42,6 +42,7 @@ import ( "github.com/getlantern/flashlight/chained" "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/proxyimpl" ) var ( @@ -49,7 +50,7 @@ var ( ) func main() { - chained.IdleTimeout = 2 * time.Second + proxyimpl.IdleTimeout = 2 * time.Second chained.PerformanceProbes = 1 chained.BasePerformanceProbeKB = 100 @@ -84,7 +85,7 @@ func main() { return } - sleepTime := time.Duration(float64(chained.IdleTimeout) * 3 * rand.Float64()) + sleepTime := time.Duration(float64(proxyimpl.IdleTimeout) * 3 * rand.Float64()) log.Debugf("Sleeping %v", sleepTime) time.Sleep(sleepTime) } diff --git a/proxyimpl/common.go b/proxyimpl/common.go new file mode 100644 index 000000000..91adcd780 --- /dev/null +++ b/proxyimpl/common.go @@ -0,0 +1,223 @@ +package proxyimpl + +import ( + "context" + "math/rand" + "runtime" + "strconv" + "time" + + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight/browsers/simbrowser" + "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/ops" + tls "github.com/refraction-networking/utls" +) + +var ( + ChainedDialTimeout = 1 * time.Minute + + // IdleTimeout closes connections idle for a period to avoid dangling + // connections. Web applications tend to contact servers in 1 minute + // interval or below. 65 seconds is long enough to avoid interrupt normal + // connections but shorter than the idle timeout on the server to avoid + // running into closed connection problems. + IdleTimeout = 65 * time.Second + + defaultMultiplexedPhysicalConns int32 = 1 +) + +func splitClientHello(hello []byte) [][]byte { + const minSplits, maxSplits = 2, 5 + var ( + maxLen = len(hello) / minSplits + splits = [][]byte{} + start = 0 + end = start + rand.Intn(maxLen) + 1 + ) + for end < len(hello) && len(splits) < maxSplits-1 { + splits = append(splits, hello[start:end]) + start = end + end = start + rand.Intn(maxLen) + 1 + } + splits = append(splits, hello[start:]) + return splits +} + +func clientHelloID(pc *config.ProxyConfig) tls.ClientHelloID { + chid := availableClientHelloIDs[pc.TLSClientHelloID] + if chid.Client == "" { + chid = tls.HelloGolang + } + return chid +} + +// helloBrowser is a special hello ID denoting that ClientHellos should be based on those used by +// the system default browser. This structure does not actually get passed to utls code. It is +// caught by tlsConfigForProxy and converted to tls.HelloCustom with a proper corresponding +// ClientHelloSpec. +var helloBrowser = tls.ClientHelloID{ + Client: "Browser", + Version: "0", +} + +var availableClientHelloIDs = map[string]tls.ClientHelloID{ + "HelloGolang": tls.HelloGolang, + "HelloRandomized": tls.HelloRandomized, + "HelloRandomizedALPN": tls.HelloRandomizedALPN, + "HelloRandomizedNoALPN": tls.HelloRandomizedNoALPN, + "HelloFirefox_Auto": tls.HelloFirefox_Auto, + "HelloFirefox_55": tls.HelloFirefox_55, + "HelloFirefox_56": tls.HelloFirefox_56, + "HelloFirefox_105": tls.HelloFirefox_105, + "HelloChrome_Auto": tls.HelloChrome_Auto, + "HelloChrome_58": tls.HelloChrome_58, + "HelloChrome_62": tls.HelloChrome_62, + "HelloChrome_106": tls.HelloChrome_106, + "HelloEdge_Auto": tls.HelloEdge_Auto, + "Hello360_Auto": tls.Hello360_Auto, + "HelloQQ_Auto": tls.HelloQQ_Auto, + "HelloQQ_11": tls.HelloQQ_11_1, + "HelloBrowser": helloBrowser, +} + +// getBrowserHello determines the best way to mimic the system's default web browser. There are a +// few possible failure points in making this determination, e.g. a failure to obtain the default +// browser or a failure to capture a hello from the browser. However, this function will always find +// something reasonable to fall back on. +func getBrowserHello(ctx context.Context, configDir string, uc common.UserConfig) helloSpec { + // We have a number of ways to approximate the browser's ClientHello format. We begin with the + // most desirable, progressively falling back to less desirable options on failure. + + op := ops.Begin("get_browser_hello") + op.Set("platform", runtime.GOOS) + defer op.End() + + hello, err := activelyObtainBrowserHello(ctx, configDir) + if err == nil { + return *hello + } + op.FailIf(err) + log.Debugf("failed to actively obtain browser hello: %v", err) + + // Our last option is to simulate a browser choice for the user based on market share. + return helloSpec{simbrowser.ChooseForUser(ctx, uc).ClientHelloID, nil} +} + +func _setting(settings map[string]string, name string) string { + if settings == nil { + return "" + } + return settings[name] +} + +func _settingInt(settings map[string]string, name string) int { + _val := _setting(settings, name) + if _val == "" { + return 0 + } + val, err := strconv.Atoi(_val) + if err != nil { + log.Errorf("Setting %v: %v is not an int", name, _val) + return 0 + } + return val +} + +func _settingFloat(settings map[string]string, name string) float64 { + _val := _setting(settings, name) + if _val == "" { + return 0.0 + } + val, err := strconv.ParseFloat(_val, 64) + if err != nil { + log.Errorf("Setting %v: %v is not a float", name, _val) + return 0.0 + } + return val +} + +func _settingBool(settings map[string]string, name string) bool { + _val := _setting(settings, name) + if _val == "" { + return false + } + val, err := strconv.ParseBool(_val) + if err != nil { + log.Errorf("Setting %v: %v is not a boolean", name, _val) + return false + } + return val +} + +func muxSettingInt(pc *config.ProxyConfig, name string) int { + return _settingInt(pc.MultiplexedSettings, name) +} + +func muxSettingBool(pc *config.ProxyConfig, name string) bool { + return _settingBool(pc.MultiplexedSettings, name) +} + +func muxSettingFloat(pc *config.ProxyConfig, name string) float64 { + return _settingFloat(pc.MultiplexedSettings, name) +} + +func ptSettingInt(pc *config.ProxyConfig, name string) int { + return _settingInt(pc.PluggableTransportSettings, name) +} + +func ptSetting(pc *config.ProxyConfig, name string) string { + return _setting(pc.PluggableTransportSettings, name) +} + +func ptSettingBool(pc *config.ProxyConfig, name string) bool { + return _settingBool(pc.PluggableTransportSettings, name) +} + +func desktopOrderedCipherSuites(pc *config.ProxyConfig) []uint16 { + return ciphersFromNames(pc.TLSDesktopOrderedCipherSuiteNames) +} + +func mobileOrderedCipherSuites(pc *config.ProxyConfig) []uint16 { + return ciphersFromNames(pc.TLSMobileOrderedCipherSuiteNames) +} + +func ciphersFromNames(cipherNames []string) []uint16 { + var ciphers []uint16 + + for _, cipherName := range cipherNames { + cipher, found := availableTLSCiphers[cipherName] + if !found { + log.Errorf("Unknown cipher: %v", cipherName) + continue + } + ciphers = append(ciphers, cipher) + } + + return ciphers +} + +var availableTLSCiphers = map[string]uint16{ + "TLS_RSA_WITH_RC4_128_SHA": tls.TLS_RSA_WITH_RC4_128_SHA, + "TLS_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_RSA_WITH_AES_128_CBC_SHA": tls.TLS_RSA_WITH_AES_128_CBC_SHA, + "TLS_RSA_WITH_AES_256_CBC_SHA": tls.TLS_RSA_WITH_AES_256_CBC_SHA, + "TLS_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_RSA_WITH_AES_128_CBC_SHA256, + "TLS_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_RSA_WITH_AES_128_GCM_SHA256, + "TLS_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_RSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_RSA_WITH_RC4_128_SHA": tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, +} diff --git a/proxyimpl/common_test.go b/proxyimpl/common_test.go new file mode 100644 index 000000000..a8f621438 --- /dev/null +++ b/proxyimpl/common_test.go @@ -0,0 +1,56 @@ +package proxyimpl + +import ( + "testing" + + "github.com/getlantern/common/config" + "github.com/stretchr/testify/assert" +) + +func TestPTSettingsNil(t *testing.T) { + s := &config.ProxyConfig{} + assert.False(t, ptSettingBool(s, "bool")) +} + +func TestPTSettings(t *testing.T) { + s := &config.ProxyConfig{ + PluggableTransportSettings: map[string]string{ + "true": "true", + "false": "false", + "empty": "", + "2": "2", + "falsestring": "false", + "truestring": "true", + "2string": "2", + + "badint": "notint", + "badbool": "notbool", + }, + } + assert.True(t, ptSettingBool(s, "true")) + assert.False(t, ptSettingBool(s, "false")) + assert.False(t, ptSettingBool(s, "empty")) + assert.False(t, ptSettingBool(s, "unknown")) + assert.False(t, ptSettingBool(s, "2")) + assert.Equal(t, 2, ptSettingInt(s, "2")) + assert.Equal(t, 0, ptSettingInt(s, "empty")) + assert.Equal(t, 0, ptSettingInt(s, "unknown")) + assert.Equal(t, 0, ptSettingInt(s, "false")) + + assert.False(t, ptSettingBool(s, "falsestring")) + assert.True(t, ptSettingBool(s, "truestring")) + assert.Equal(t, 2, ptSettingInt(s, "2string")) + + assert.Equal(t, 0, ptSettingInt(s, "badint")) + assert.False(t, ptSettingBool(s, "badbool")) + + assert.Equal(t, "", ptSetting(s, "empty")) + assert.Equal(t, "2", ptSetting(s, "2")) +} + +func TestCiphersFromNames(t *testing.T) { + assert.Nil(t, ciphersFromNames(nil)) + assert.Nil(t, ciphersFromNames([]string{})) + assert.Nil(t, ciphersFromNames([]string{"UNKNOWN"})) + assert.EqualValues(t, []uint16{0x0035, 0x003c}, ciphersFromNames([]string{"TLS_RSA_WITH_AES_256_CBC_SHA", "UNKNOWN", "TLS_RSA_WITH_AES_128_CBC_SHA256"})) +} diff --git a/proxyimpl/dialer.go b/proxyimpl/dialer.go new file mode 100644 index 000000000..3c3bca754 --- /dev/null +++ b/proxyimpl/dialer.go @@ -0,0 +1,11 @@ +package proxyimpl + +import ( + "context" + "net" +) + +type Dialer interface { + DialContext(ctx context.Context, network, addr string) (net.Conn, error) + SetLocalAddr(addr net.Addr) +} diff --git a/proxyimpl/doc.go b/proxyimpl/doc.go new file mode 100644 index 000000000..b46ea31cd --- /dev/null +++ b/proxyimpl/doc.go @@ -0,0 +1,7 @@ +// proxyimpl package implements the different dial methods for different +// pluggable transports. +// +// Each pluggable transport has its own implementation of the ProxyImpl. Each +// implementation should basically have a DialServer() and Close() methods for +// the client to talk to the proxy. +package proxyimpl diff --git a/chained/hello_roller.go b/proxyimpl/hello_roller.go similarity index 99% rename from chained/hello_roller.go rename to proxyimpl/hello_roller.go index 64e82f61d..22ba9e5cc 100644 --- a/chained/hello_roller.go +++ b/proxyimpl/hello_roller.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( stderrors "errors" diff --git a/proxyimpl/http.go b/proxyimpl/http.go new file mode 100644 index 000000000..4d755b9d2 --- /dev/null +++ b/proxyimpl/http.go @@ -0,0 +1,36 @@ +package proxyimpl + +import ( + "context" + "fmt" + "net" + + "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/ops" +) + +type httpImpl struct { + common.NopCloser + dialCore coreDialer + addr string +} + +func newHTTPImpl(addr string, dialCore coreDialer) ProxyImpl { + return &httpImpl{addr: addr, dialCore: dialCore} +} + +func (impl *httpImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { + c, err := impl.dialCore(op, ctx, impl.addr) + if err != nil { + return nil, fmt.Errorf("Unable to dial HTTP proxy at %v: %v", impl.addr, err) + } + + // Run the post-layer 4 dial function if specified + // if onPostLayer4Dial != nil { + // c, err = onPostLayer4Dial(c.(*net.TCPConn)) + // if err != nil { + // return nil, fmt.Errorf("onPostLayer4Dial failed: %v", err) + // } + // } + return c, nil +} diff --git a/chained/tls_config.go b/proxyimpl/https.go similarity index 64% rename from chained/tls_config.go rename to proxyimpl/https.go index 7e45b94ec..31ea6d0f0 100644 --- a/chained/tls_config.go +++ b/proxyimpl/https.go @@ -1,13 +1,13 @@ -package chained +package proxyimpl import ( "bytes" "context" "crypto/x509" "encoding/pem" - "io" - "os" - "runtime" + "net" + "sync" + "time" tls "github.com/refraction-networking/utls" @@ -16,9 +16,98 @@ import ( "github.com/getlantern/flashlight/browsers/simbrowser" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/hellosplitter" + "github.com/getlantern/tlsdialer/v3" "github.com/getlantern/tlsresumption" ) +type httpsImpl struct { + common.NopCloser + dialCore coreDialer + addr string + tlsConfig *tls.Config + roller *helloRoller + tlsClientHelloSplitting bool + sync.Mutex +} + +func newHTTPSImpl(configDir, name, addr string, pc *config.ProxyConfig, uc common.UserConfig, dialCore coreDialer) (ProxyImpl, error) { + const timeout = 5 * time.Second + + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + tlsConfig, hellos, err := tlsConfigForProxy(ctx, configDir, name, pc, uc) + if err != nil { + return nil, log.Error(errors.Wrap(err).With("addr", addr)) + } + if len(hellos) == 0 { + return nil, log.Error(errors.New("expected at least one hello")) + } + return &httpsImpl{ + dialCore: dialCore, + addr: addr, + tlsConfig: tlsConfig, + roller: &helloRoller{hellos: hellos}, + tlsClientHelloSplitting: pc.TLSClientHelloSplitting, + }, nil +} + +func (impl *httpsImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { + r := impl.roller.getCopy() + defer impl.roller.updateTo(r) + + currentHello := r.current() + helloID, helloSpec, err := currentHello.utlsSpec() + if err != nil { + log.Debugf("failed to generate valid utls hello spec; advancing roller: %v", err) + r.advance() + return nil, errors.New("failed to generate valid utls hello spec: %v", err) + } + d := tlsdialer.Dialer{ + DoDial: func(network, addr string, timeout time.Duration) (net.Conn, error) { + tcpConn, err := impl.dialCore(op, ctx, impl.addr) + if err != nil { + return nil, err + } + if impl.tlsClientHelloSplitting { + tcpConn = hellosplitter.Wrap(tcpConn, splitClientHello) + } + + // Run the post-layer 4 dial function if specified + // if onPostLayer4Dial != nil { + // tcpConn, err = onPostLayer4Dial(tcpConn.(*net.TCPConn)) + // if err != nil { + // return nil, fmt.Errorf("onPostLayer4Dial failed: %v", err) + // } + // } + return tcpConn, err + }, + Timeout: timeoutFor(ctx), + SendServerName: impl.tlsConfig.ServerName != "", + Config: impl.tlsConfig.Clone(), + ClientHelloID: helloID, + ClientHelloSpec: helloSpec, + } + result, err := d.DialForTimings("tcp", impl.addr) + if err != nil { + if isHelloErr(err) { + log.Debugf("got error likely related to bad hello; advancing roller: %v", err) + r.advance() + } + return nil, err + } + return result.Conn, nil +} + +func timeoutFor(ctx context.Context) time.Duration { + deadline, ok := ctx.Deadline() + if ok { + return deadline.Sub(time.Now()) + } + return ChainedDialTimeout +} + // Generates TLS configuration for connecting to proxy specified by the config.ProxyConfig. This // function may block while determining things like how to mimic the default browser's client hello. // @@ -121,49 +210,3 @@ func tlsConfigForProxy(ctx context.Context, configDir, proxyName string, pc *con return cfg, hellos, nil } - -// getBrowserHello determines the best way to mimic the system's default web browser. There are a -// few possible failure points in making this determination, e.g. a failure to obtain the default -// browser or a failure to capture a hello from the browser. However, this function will always find -// something reasonable to fall back on. -func getBrowserHello(ctx context.Context, configDir string, uc common.UserConfig) helloSpec { - // We have a number of ways to approximate the browser's ClientHello format. We begin with the - // most desirable, progressively falling back to less desirable options on failure. - - op := ops.Begin("get_browser_hello") - op.Set("platform", runtime.GOOS) - defer op.End() - - hello, err := activelyObtainBrowserHello(ctx, configDir) - if err == nil { - return *hello - } - op.FailIf(err) - log.Debugf("failed to actively obtain browser hello: %v", err) - - // Our last option is to simulate a browser choice for the user based on market share. - return helloSpec{simbrowser.ChooseForUser(ctx, uc).ClientHelloID, nil} -} - -func orderedCipherSuitesFromConfig(pc *config.ProxyConfig) []uint16 { - if common.Platform == "android" { - return mobileOrderedCipherSuites(pc) - } - return desktopOrderedCipherSuites(pc) -} - -// Write the session keys to file if SSLKEYLOGFILE is set, same as browsers. -func getTLSKeyLogWriter() io.Writer { - createKeyLogWriterOnce.Do(func() { - path := os.Getenv("SSLKEYLOGFILE") - if path == "" { - return - } - var err error - tlsKeyLogWriter, err = os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0600) - if err != nil { - log.Debugf("Error creating keylog file at %v: %s", path, err) - } - }) - return tlsKeyLogWriter -} diff --git a/chained/lampshade_impl.go b/proxyimpl/lampshade.go similarity index 94% rename from chained/lampshade_impl.go rename to proxyimpl/lampshade.go index edb757003..b0cce17e3 100644 --- a/chained/lampshade_impl.go +++ b/proxyimpl/lampshade.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -11,6 +11,7 @@ import ( "github.com/getlantern/common/config" "github.com/getlantern/errors" "github.com/getlantern/flashlight/buffers" + "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" "github.com/getlantern/keyman" "github.com/getlantern/lampshade" @@ -18,15 +19,15 @@ import ( ) type lampshadeImpl struct { - nopCloser - reportDialCore reportDialCoreFn + common.NopCloser + reportDialCore ReportDialCoreFn name string addr string dialer lampshade.Dialer setOp func(op *ops.Op) } -func newLampshadeImpl(name, addr string, pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newLampshadeImpl(name, addr string, pc *config.ProxyConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { cert, err := keyman.LoadCertificateFromPEMBytes([]byte(pc.Cert)) if err != nil { return nil, log.Error(errors.Wrap(err).With("addr", addr)) @@ -92,7 +93,7 @@ func newLampshadeImpl(name, addr string, pc *config.ProxyConfig, reportDialCore return &lampshadeImpl{reportDialCore: reportDialCore, name: name, addr: addr, dialer: dialer, setOp: setOp}, nil } -func (impl *lampshadeImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *lampshadeImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { impl.setOp(op) return impl.dialer.DialContext(ctx, func() (net.Conn, error) { // note - we do not wrap the TCP connection with IdleTiming because diff --git a/chained/multipath.go b/proxyimpl/multipath.go similarity index 63% rename from chained/multipath.go rename to proxyimpl/multipath.go index 98e96b5b1..d0f363853 100644 --- a/chained/multipath.go +++ b/proxyimpl/multipath.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -7,14 +7,13 @@ import ( "github.com/getlantern/common/config" "github.com/getlantern/errors" - "github.com/getlantern/flashlight/balancer" "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" "github.com/getlantern/multipath" ) type mpDialerAdapter struct { - impl proxyImpl + impl ProxyImpl label string } @@ -29,46 +28,43 @@ func (d *mpDialerAdapter) DialContext(ctx context.Context) (net.Conn, error) { op = ops.Begin("dial_subflow") } defer op.End() - return d.impl.dialServer(op, ctx) + return d.impl.DialServer(op, ctx) } func (d *mpDialerAdapter) Label() string { return d.label } -type multipathImpl struct { - nopCloser +type MultipathImpl struct { + common.NopCloser dialer multipath.Dialer } -func (impl *multipathImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *MultipathImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { return impl.dialer.DialContext(context.WithValue(ctx, "op", op)) } -func (impl *multipathImpl) FormatStats() []string { +func (impl *MultipathImpl) FormatStats() []string { return impl.dialer.(multipath.Stats).FormatStats() } -func CreateMPDialer(configDir, endpoint string, ss map[string]*config.ProxyConfig, uc common.UserConfig) (balancer.Dialer, error) { +func NewMultipathProxyImpl( + configDir, endpoint string, + ss map[string]*config.ProxyConfig, + uc common.UserConfig, + extractProxyConfigParamsFunc func(*config.ProxyConfig) (addr string, transport string, network string, err error), + defaultReportDialCore ReportDialCoreFn, +) (ProxyImpl, error) { if len(ss) < 1 { return nil, errors.New("no dialers") } - var p *proxy - var err error var dialers []multipath.Dialer for name, s := range ss { - if p == nil { - // Note: we pass the first server info to newProxy for the attributes shared by all paths - p, err = newProxy(endpoint, endpoint+":0", "multipath", "multipath", s, uc) - if err != nil { - return nil, err - } - } - addr, transport, _, err := extractParams(s) + addr, transport, _, err := extractProxyConfigParamsFunc(s) if err != nil { return nil, err } - impl, err := createImpl(configDir, name, addr, transport, s, uc, p.reportDialCore) + impl, err := New(configDir, name, addr, transport, s, uc, defaultReportDialCore) if err != nil { log.Errorf("failed to add %v to %v, continuing: %v", s.Addr, name, err) continue @@ -79,11 +75,10 @@ func CreateMPDialer(configDir, endpoint string, ss map[string]*config.ProxyConfi if len(dialers) == 0 { return nil, errors.New("no subflow dialer") } - p.impl = &multipathImpl{dialer: multipath.NewDialer(endpoint, dialers)} - return p, nil + return &MultipathImpl{dialer: multipath.NewDialer(endpoint, dialers)}, nil } -func groupByMultipathEndpoint(proxies map[string]*config.ProxyConfig) map[string]map[string]*config.ProxyConfig { +func GroupByMultipathEndpoint(proxies map[string]*config.ProxyConfig) map[string]map[string]*config.ProxyConfig { groups := make(map[string]map[string]*config.ProxyConfig) for name, s := range proxies { group, exists := groups[s.MultipathEndpoint] diff --git a/chained/multiplexed_impl.go b/proxyimpl/multiplexed.go similarity index 93% rename from chained/multiplexed_impl.go rename to proxyimpl/multiplexed.go index 473c419db..7072a09dc 100644 --- a/chained/multiplexed_impl.go +++ b/proxyimpl/multiplexed.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -19,11 +19,11 @@ const ( ) type multiplexedImpl struct { - proxyImpl + ProxyImpl multiplexedDial cmux.DialFN } -func multiplexed(wrapped proxyImpl, name string, s *config.ProxyConfig) (proxyImpl, error) { +func multiplexed(wrapped ProxyImpl, name string, s *config.ProxyConfig) (ProxyImpl, error) { log.Debugf("Enabling multiplexing for %v", name) poolSize := s.MultiplexedPhysicalConns if poolSize < 1 { @@ -38,7 +38,7 @@ func multiplexed(wrapped proxyImpl, name string, s *config.ProxyConfig) (proxyIm Dial: func(ctx context.Context, network, addr string) (net.Conn, error) { op := ops.Begin("dial_multiplexed") defer op.End() - return wrapped.dialServer(op, ctx) + return wrapped.DialServer(op, ctx) }, PoolSize: int(poolSize), Protocol: proto, @@ -46,7 +46,7 @@ func multiplexed(wrapped proxyImpl, name string, s *config.ProxyConfig) (proxyIm return &multiplexedImpl{wrapped, multiplexedDial}, nil } -func (impl *multiplexedImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *multiplexedImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { return impl.multiplexedDial(ctx, "", "") } diff --git a/chained/obfs4_impl.go b/proxyimpl/obfs4.go similarity index 88% rename from chained/obfs4_impl.go rename to proxyimpl/obfs4.go index 8a8ff7799..e71c6af6e 100644 --- a/chained/obfs4_impl.go +++ b/proxyimpl/obfs4.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -7,20 +7,21 @@ import ( pt "git.torproject.org/pluggable-transports/goptlib.git" "github.com/getlantern/common/config" + "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" "gitlab.com/yawning/obfs4.git/transports/base" "gitlab.com/yawning/obfs4.git/transports/obfs4" ) type obfs4Impl struct { - nopCloser + common.NopCloser dialCore coreDialer addr string cf base.ClientFactory args interface{} } -func newOBFS4Impl(name, addr string, pc *config.ProxyConfig, dialCore coreDialer) (proxyImpl, error) { +func newOBFS4Impl(name, addr string, pc *config.ProxyConfig, dialCore coreDialer) (ProxyImpl, error) { if pc.Cert == "" { return nil, fmt.Errorf("No Cert configured for obfs4 server, can't connect") } @@ -47,7 +48,7 @@ func newOBFS4Impl(name, addr string, pc *config.ProxyConfig, dialCore coreDialer }, nil } -func (impl *obfs4Impl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *obfs4Impl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { dial := func(network, address string) (net.Conn, error) { // We know for sure the network and address are the same as what // the inner DailServer uses. diff --git a/chained/preconnecting_dialer.go b/proxyimpl/preconnecting_dialer.go similarity index 85% rename from chained/preconnecting_dialer.go rename to proxyimpl/preconnecting_dialer.go index a067d4df2..200b10b1a 100644 --- a/chained/preconnecting_dialer.go +++ b/proxyimpl/preconnecting_dialer.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -21,7 +21,7 @@ func (pc *preconnectedConn) expired() bool { } type preconnectingDialer struct { - wrapped proxyImpl + wrapped ProxyImpl log golog.Logger maxPreconnect int expiration time.Duration @@ -32,7 +32,7 @@ type preconnectingDialer struct { closeCh chan bool } -func newPreconnectingDialer(name string, maxPreconnect int, expiration time.Duration, wrapped proxyImpl) *preconnectingDialer { +func newPreconnectingDialer(name string, maxPreconnect int, expiration time.Duration, wrapped ProxyImpl) *preconnectingDialer { pd := &preconnectingDialer{ wrapped: wrapped, log: golog.LoggerFor(fmt.Sprintf("chained.preconnect.%v", name)), @@ -46,7 +46,7 @@ func newPreconnectingDialer(name string, maxPreconnect int, expiration time.Dura return pd } -func (pd *preconnectingDialer) dialServer(op *ops.Op, ctx context.Context) (conn net.Conn, err error) { +func (pd *preconnectingDialer) DialServer(op *ops.Op, ctx context.Context) (conn net.Conn, err error) { // Whenever we dial successfully, warm up the pool by preconnecting defer func() { if err == nil { @@ -67,7 +67,7 @@ func (pd *preconnectingDialer) dialServer(op *ops.Op, ctx context.Context) (conn pd.log.Tracef("preconnection expired before use") default: pd.log.Tracef("dialing on demand") - conn, err = pd.wrapped.dialServer(op, ctx) + conn, err = pd.wrapped.DialServer(op, ctx) return } } @@ -95,11 +95,11 @@ func (pd *preconnectingDialer) preconnectIfNecessary(op *ops.Op) { } func (pd *preconnectingDialer) preconnect(op *ops.Op) { - ctx, cancel := context.WithTimeout(context.Background(), chainedDialTimeout) + ctx, cancel := context.WithTimeout(context.Background(), ChainedDialTimeout) defer cancel() expiration := time.Now().Add(pd.expiration) - conn, err := pd.wrapped.dialServer(op, ctx) + conn, err := pd.wrapped.DialServer(op, ctx) if err != nil { pd.log.Errorf("error preconnecting: %v", err) pd.decrementPreconnecting() @@ -110,12 +110,6 @@ func (pd *preconnectingDialer) preconnect(op *ops.Op) { pd.log.Trace("preconnected") } -func (pd *preconnectingDialer) numPreconnecting() int { - pd.statsMutex.RLock() - defer pd.statsMutex.RUnlock() - return pd.preconnecting -} - func (pd *preconnectingDialer) numPreconnected() int { pd.statsMutex.RLock() defer pd.statsMutex.RUnlock() @@ -151,13 +145,13 @@ func (pd *preconnectingDialer) closeWhenNecessary() { case pconn := <-pd.pool: pd.log.Trace("closing preconnection") pconn.Conn.Close() - case <-time.After(chainedDialTimeout * 2): + case <-time.After(ChainedDialTimeout * 2): pd.log.Trace("waited twice the chained dial timeout, no more preconnections to close") return } } } -func (pd *preconnectingDialer) close() { +func (pd *preconnectingDialer) Close() { close(pd.closeCh) } diff --git a/chained/preconnecting_dialer_test.go b/proxyimpl/preconnecting_dialer_test.go similarity index 87% rename from chained/preconnecting_dialer_test.go rename to proxyimpl/preconnecting_dialer_test.go index fadd2fd93..5138a045c 100644 --- a/chained/preconnecting_dialer_test.go +++ b/proxyimpl/preconnecting_dialer_test.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -28,11 +28,11 @@ func (conn *testConn) Close() error { return nil } -func newEmptyDialer() proxyImpl { +func newEmptyDialer() ProxyImpl { iod := int64(0) ipc := int64(0) - return &testImpl{d: func(ctx context.Context) (net.Conn, error) { + return &TestImpl{DialServerFunc: func(ctx context.Context) (net.Conn, error) { var id string if ctx == nil { if atomic.LoadInt64(&iod) >= maxSuccessfulDials { @@ -51,9 +51,9 @@ func newEmptyDialer() proxyImpl { func TestPreconnecting(t *testing.T) { pd := newPreconnectingDialer("testPreconnecting", 2, 10*time.Second, newEmptyDialer()) - defer pd.close() + defer pd.Close() - conn, err := pd.dialServer(nil, nil) + conn, err := pd.DialServer(nil, nil) if !assert.NoError(t, err) { return } @@ -62,7 +62,7 @@ func TestPreconnecting(t *testing.T) { for i := 1; i <= maxSuccessfulPreconnects; i++ { time.Sleep(25 * time.Millisecond) assert.Equal(t, 1, pd.numPreconnected()) - conn, err = pd.dialServer(nil, nil) + conn, err = pd.DialServer(nil, nil) if !assert.NoError(t, err) { return } @@ -72,30 +72,30 @@ func TestPreconnecting(t *testing.T) { for i := 1; i < maxSuccessfulDials; i++ { t.Log(i) time.Sleep(25 * time.Millisecond) - conn, err = pd.dialServer(nil, nil) + conn, err = pd.DialServer(nil, nil) if !assert.NoError(t, err) { return } assert.Equal(t, fmt.Sprintf("ondemand-%d", i+1), conn.(*testConn).id, "Should have gotten on demand dialed connection after preconnects started failing") } - conn, err = pd.dialServer(nil, nil) + conn, err = pd.DialServer(nil, nil) assert.Error(t, err, "Should have failed to dial after on demand dials started failing") } func TestPreconnectingTimeout(t *testing.T) { expiration := 250 * time.Millisecond pd := newPreconnectingDialer("testPreconnectingTimeout", 2, expiration, newEmptyDialer()) - defer pd.close() + defer pd.Close() for i := 1; i <= maxSuccessfulPreconnects; i++ { // dial to fill up pool - pd.dialServer(nil, nil) + pd.DialServer(nil, nil) } // wait for preconnected connections to expire time.Sleep(expiration * 2) - conn, err := pd.dialServer(nil, nil) + conn, err := pd.DialServer(nil, nil) if assert.NoError(t, err) { assert.NotContains(t, conn.(*testConn).id, "preconnected", "After all preconnected connections expired, we should dial on demand") } @@ -107,7 +107,7 @@ func TestPreconnectingClose(t *testing.T) { for i := 1; i <= maxSuccessfulPreconnects; i++ { // dial to fill up pool - pd.dialServer(nil, nil) + pd.DialServer(nil, nil) } // wait a little for preconnecting to finish @@ -115,14 +115,14 @@ func TestPreconnectingClose(t *testing.T) { assert.True(t, len(pd.pool) >= 2, "should have at least 2 preconnections") assert.True(t, len(pd.pool) <= 4, "should have no more than 4 preconnections") - pd.close() + pd.Close() // wait a little for closing to happen time.Sleep(25 * time.Millisecond) assert.Empty(t, pd.pool) // wait for preconnected connections to expire time.Sleep(expiration * 2) - conn, err := pd.dialServer(nil, nil) + conn, err := pd.DialServer(nil, nil) if assert.NoError(t, err) { assert.NotContains(t, conn.(*testConn).id, "preconnected", "After all preconnected connections expired, we should dial on demand") } diff --git a/proxyimpl/proxyimpl.go b/proxyimpl/proxyimpl.go new file mode 100644 index 000000000..b924f7c90 --- /dev/null +++ b/proxyimpl/proxyimpl.go @@ -0,0 +1,112 @@ +package proxyimpl + +import ( + "context" + "net" + "strings" + + "github.com/getlantern/common/config" + "github.com/getlantern/errors" + "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/ops" + "github.com/getlantern/golog" + "github.com/getlantern/netx" +) + +var log = golog.LoggerFor("proxyimpl") + +// ProxyImpl is the interface to hide the details of client side logic for +// different types of pluggable transports. +type ProxyImpl interface { + // DialServer is to establish connection to the proxy server to the point + // of being able to transfer application data. + DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) + // close releases the resources associated with the implementation, if any. + Close() +} + +type ReportDialCoreFn func(op *ops.Op, dialCore func() (net.Conn, error)) (net.Conn, error) + +type coreDialer func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) + +func New( + configDir, name, addr, transport string, + s *config.ProxyConfig, + uc common.UserConfig, + reportDialCore ReportDialCoreFn, +) (ProxyImpl, error) { + coreDialer := func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) { + return reportDialCore(op, func() (net.Conn, error) { + return netx.DialContext(ctx, "tcp", addr) + }) + } + if strings.HasPrefix(transport, "utp") { + dialer, err := utpDialer() + if err != nil { + return nil, err + } + coreDialer = func(op *ops.Op, ctx context.Context, addr string) (net.Conn, error) { + return reportDialCore(op, func() (net.Conn, error) { + return dialer(ctx, addr) + }) + } + } + var impl ProxyImpl + var err error + switch transport { + case "", "http", "https", "utphttp", "utphttps": + if s.Cert == "" { + log.Debugf( + "No Cert configured for %s, will dial with plain tcp", + addr, + ) + impl = newHTTPImpl(addr, coreDialer) + } else { + log.Tracef("Cert configured for %s, will dial with tls", addr) + impl, err = newHTTPSImpl(configDir, name, addr, s, uc, coreDialer) + } + case "obfs4", "utpobfs4": + impl, err = newOBFS4Impl(name, addr, s, coreDialer) + case "lampshade": + impl, err = newLampshadeImpl(name, addr, s, reportDialCore) + case "quic_ietf": + impl, err = newQUICImpl(name, addr, s, reportDialCore) + case "shadowsocks": + impl, err = newShadowsocksImpl(name, addr, s, reportDialCore) + case "wss": + impl, err = newWSSImpl(addr, s, reportDialCore) + case "tlsmasq": + impl, err = newTLSMasqImpl(configDir, name, addr, s, uc, reportDialCore) + case "starbridge": + impl, err = newStarbridgeImpl(name, addr, s, reportDialCore) + default: + err = errors.New("Unknown transport: %v", transport). + With("addr", addr). + With("plugabble-transport", transport) + } + if err != nil { + return nil, err + } + + allowPreconnecting := false + switch transport { + case "http", "https", "utphttp", "utphttps", "obfs4", "utpobfs4", "tlsmasq": + allowPreconnecting = true + } + + if s.MultiplexedAddr != "" || transport == "utphttp" || + transport == "utphttps" || transport == "utpobfs4" || + transport == "tlsmasq" { + impl, err = multiplexed(impl, name, s) + if err != nil { + return nil, err + } + } else if allowPreconnecting && s.MaxPreconnect > 0 { + log.Debugf("Enabling preconnecting for %v", name) + // give ourselves a large margin for making sure we're not using idled preconnected connections + expiration := IdleTimeout / 2 + impl = newPreconnectingDialer(name, int(s.MaxPreconnect), expiration, impl) + } + + return impl, err +} diff --git a/chained/quic_impl.go b/proxyimpl/quic.go similarity index 86% rename from chained/quic_impl.go rename to proxyimpl/quic.go index e83813ecb..df933d1d5 100644 --- a/chained/quic_impl.go +++ b/proxyimpl/quic.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -14,12 +14,12 @@ import ( ) type quicImpl struct { - reportDialCore reportDialCoreFn + reportDialCore ReportDialCoreFn addr string dialer *quicwrapper.Client } -func newQUICImpl(name, addr string, pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newQUICImpl(name, addr string, pc *config.ProxyConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { tlsConf := >ls.Config{ ServerName: pc.TLSServerNameIndicator, InsecureSkipVerify: true, @@ -27,7 +27,7 @@ func newQUICImpl(name, addr string, pc *config.ProxyConfig, reportDialCore repor } disablePathMTUDiscovery := true - if ptSettingBool(pc, "path_mtu_discovery") == true { + if ptSettingBool(pc, "path_mtu_discovery") { disablePathMTUDiscovery = false } @@ -55,12 +55,12 @@ func newQUICImpl(name, addr string, pc *config.ProxyConfig, reportDialCore repor return &quicImpl{reportDialCore, addr, dialer}, nil } -func (impl *quicImpl) close() { +func (impl *quicImpl) Close() { log.Debug("Closing quic session: Proxy closed.") impl.dialer.Close() } -func (impl *quicImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *quicImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { return impl.reportDialCore(op, func() (net.Conn, error) { conn, err := impl.dialer.DialContext(ctx) if err != nil { diff --git a/chained/session_caching.go b/proxyimpl/session_caching.go similarity index 99% rename from chained/session_caching.go rename to proxyimpl/session_caching.go index 37d609c16..5b926fa75 100644 --- a/chained/session_caching.go +++ b/proxyimpl/session_caching.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "bytes" diff --git a/chained/session_caching_test.go b/proxyimpl/session_caching_test.go similarity index 98% rename from chained/session_caching_test.go rename to proxyimpl/session_caching_test.go index 7e6870f5f..3bd66987d 100644 --- a/chained/session_caching_test.go +++ b/proxyimpl/session_caching_test.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "testing" diff --git a/chained/shadowsocks_impl.go b/proxyimpl/shadowsocks.go similarity index 90% rename from chained/shadowsocks_impl.go rename to proxyimpl/shadowsocks.go index 50283facb..5ec49e31a 100644 --- a/chained/shadowsocks_impl.go +++ b/proxyimpl/shadowsocks.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -18,6 +18,7 @@ import ( "github.com/getlantern/errors" "github.com/getlantern/flashlight/chained/prefixgen" + "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" ) @@ -26,14 +27,15 @@ const ( ) type shadowsocksImpl struct { - reportDialCore reportDialCoreFn + common.NopCloser + reportDialCore ReportDialCoreFn client client.Client upstream string rng *mrand.Rand rngmx sync.Mutex } -func newShadowsocksImpl(name, addr string, pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newShadowsocksImpl(name, addr string, pc *config.ProxyConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { secret := ptSetting(pc, "shadowsocks_secret") cipher := ptSetting(pc, "shadowsocks_cipher") upstream := ptSetting(pc, "shadowsocks_upstream") @@ -62,8 +64,12 @@ func newShadowsocksImpl(name, addr string, pc *config.ProxyConfig, reportDialCor if err != nil { log.Errorf("failed to parse shadowsocks prefix generator from %v for proxy %v: %v", prefixGen, name, err) } else { - prefixFunc := func() ([]byte, error) { return gen(), nil } - cl.SetTCPSaltGenerator(client.NewPrefixSaltGenerator(prefixFunc)) + cl.SetTCPSaltGenerator( + client.NewPrefixSaltGenerator( + func() ([]byte, error) { + return gen(), nil + }, + )) } } @@ -83,10 +89,7 @@ func newShadowsocksImpl(name, addr string, pc *config.ProxyConfig, reportDialCor }, nil } -func (impl *shadowsocksImpl) close() { -} - -func (impl *shadowsocksImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *shadowsocksImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { return impl.reportDialCore(op, func() (net.Conn, error) { conn, err := impl.client.DialTCP(nil, impl.generateUpstream()) if err != nil { diff --git a/chained/shadowsocks_impl_test.go b/proxyimpl/shadowsocks_test.go similarity index 98% rename from chained/shadowsocks_impl_test.go rename to proxyimpl/shadowsocks_test.go index 84fa9ee5f..fba8115f6 100644 --- a/chained/shadowsocks_impl_test.go +++ b/proxyimpl/shadowsocks_test.go @@ -1,6 +1,6 @@ //go:build !ios -package chained +package proxyimpl import ( "bytes" diff --git a/chained/starbridge_impl.go b/proxyimpl/starbridge.go similarity index 92% rename from chained/starbridge_impl.go rename to proxyimpl/starbridge.go index 2d07b2bd8..fe2cd4e9f 100644 --- a/chained/starbridge_impl.go +++ b/proxyimpl/starbridge.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -12,6 +12,7 @@ import ( "github.com/getlantern/common/config" "github.com/getlantern/errors" + "github.com/getlantern/flashlight/common" "github.com/getlantern/flashlight/ops" "github.com/getlantern/netx" ) @@ -32,13 +33,13 @@ import ( const fakeListenAddr = "1.2.3.4:5678" type starbridge struct { - nopCloser + common.NopCloser addr string config replicant.ClientConfig - reportDialCore reportDialCoreFn + reportDialCore ReportDialCoreFn } -func (impl *starbridge) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *starbridge) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { tcpConn, err := impl.reportDialCore(op, func() (net.Conn, error) { return netx.DialContext(ctx, "tcp", impl.addr) }) @@ -53,7 +54,7 @@ func (impl *starbridge) dialServer(op *ops.Op, ctx context.Context) (net.Conn, e return conn, nil } -func newStarbridgeImpl(name, addr string, pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newStarbridgeImpl(name, addr string, pc *config.ProxyConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { if ptSetting(pc, "starbridge_public_key") == "" { return nil, errors.New("no public key") } diff --git a/proxyimpl/testutils.go b/proxyimpl/testutils.go new file mode 100644 index 000000000..ed73b0f49 --- /dev/null +++ b/proxyimpl/testutils.go @@ -0,0 +1,18 @@ +package proxyimpl + +import ( + "context" + "net" + + "github.com/getlantern/flashlight/common" + "github.com/getlantern/flashlight/ops" +) + +type TestImpl struct { + common.NopCloser + DialServerFunc func(ctx context.Context) (net.Conn, error) +} + +func (impl *TestImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { + return impl.DialServerFunc(ctx) +} diff --git a/proxyimpl/tls_config.go b/proxyimpl/tls_config.go new file mode 100644 index 000000000..80dc23a5d --- /dev/null +++ b/proxyimpl/tls_config.go @@ -0,0 +1,39 @@ +package proxyimpl + +import ( + "io" + "os" + "sync" + + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight/common" +) + +var ( + tlsKeyLogWriter io.Writer + createKeyLogWriterOnce sync.Once + InsecureSkipVerifyTLSMasqOrigin = false +) + +func orderedCipherSuitesFromConfig(pc *config.ProxyConfig) []uint16 { + if common.Platform == "android" { + return mobileOrderedCipherSuites(pc) + } + return desktopOrderedCipherSuites(pc) +} + +// Write the session keys to file if SSLKEYLOGFILE is set, same as browsers. +func getTLSKeyLogWriter() io.Writer { + createKeyLogWriterOnce.Do(func() { + path := os.Getenv("SSLKEYLOGFILE") + if path == "" { + return + } + var err error + tlsKeyLogWriter, err = os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0600) + if err != nil { + log.Debugf("Error creating keylog file at %v: %s", path, err) + } + }) + return tlsKeyLogWriter +} diff --git a/chained/tls_config_ios.go b/proxyimpl/tls_config_ios.go similarity index 92% rename from chained/tls_config_ios.go rename to proxyimpl/tls_config_ios.go index a488a0bf4..77af10e3f 100644 --- a/chained/tls_config_ios.go +++ b/proxyimpl/tls_config_ios.go @@ -1,6 +1,6 @@ //go:build ios -package chained +package proxyimpl import ( "context" diff --git a/chained/tls_config_other.go b/proxyimpl/tls_config_other.go similarity index 94% rename from chained/tls_config_other.go rename to proxyimpl/tls_config_other.go index 8b87f06b8..a7c7bf2fc 100644 --- a/chained/tls_config_other.go +++ b/proxyimpl/tls_config_other.go @@ -1,6 +1,6 @@ //go:build !ios -package chained +package proxyimpl import ( "context" @@ -15,8 +15,6 @@ import ( const helloCacheFilename = "hello-cache.active-capture" func activelyObtainBrowserHello(ctx context.Context, configDir string) (*helloSpec, error) { - const tlsRecordHeaderLen = 5 - helloCacheFile := filepath.Join(configDir, helloCacheFilename) sample, err := ioutil.ReadFile(helloCacheFile) if err == nil { diff --git a/chained/tls_file_cache.go b/proxyimpl/tls_file_cache.go similarity index 99% rename from chained/tls_file_cache.go rename to proxyimpl/tls_file_cache.go index ad7a169a4..3aa7de399 100644 --- a/chained/tls_file_cache.go +++ b/proxyimpl/tls_file_cache.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "bytes" diff --git a/chained/tls_file_cache_test.go b/proxyimpl/tls_file_cache_test.go similarity index 99% rename from chained/tls_file_cache_test.go rename to proxyimpl/tls_file_cache_test.go index 7c0c04a41..305b1ab2c 100644 --- a/chained/tls_file_cache_test.go +++ b/proxyimpl/tls_file_cache_test.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "io/ioutil" diff --git a/chained/tlsmasq_impl.go b/proxyimpl/tlsmasq.go similarity index 96% rename from chained/tlsmasq_impl.go rename to proxyimpl/tlsmasq.go index f1316d15b..90c1e09c5 100644 --- a/chained/tlsmasq_impl.go +++ b/proxyimpl/tlsmasq.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -25,14 +25,14 @@ import ( ) type tlsMasqImpl struct { - nopCloser - reportDialCore reportDialCoreFn + common.NopCloser + reportDialCore ReportDialCoreFn addr string cfg tlsmasq.DialerConfig tlsClientHelloSplitting bool } -func newTLSMasqImpl(configDir, name, addr string, pc *config.ProxyConfig, uc common.UserConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newTLSMasqImpl(configDir, name, addr string, pc *config.ProxyConfig, uc common.UserConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { const timeout = 5 * time.Second ctx, cancel := context.WithTimeout(context.Background(), timeout) @@ -132,7 +132,7 @@ func cipherSuites(cipherSuites, name string) ([]uint16, error) { return suites, nil } -func (impl *tlsMasqImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *tlsMasqImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { tcpConn, err := impl.reportDialCore(op, func() (net.Conn, error) { return netx.DialContext(ctx, "tcp", impl.addr) }) diff --git a/chained/utp_disabled.go b/proxyimpl/utp_disabled.go similarity index 92% rename from chained/utp_disabled.go rename to proxyimpl/utp_disabled.go index 7137430e0..3b895c1b3 100644 --- a/chained/utp_disabled.go +++ b/proxyimpl/utp_disabled.go @@ -1,6 +1,6 @@ //go:build android || ios || linux -package chained +package proxyimpl import ( "context" diff --git a/chained/utp_enabled.go b/proxyimpl/utp_enabled.go similarity index 96% rename from chained/utp_enabled.go rename to proxyimpl/utp_enabled.go index 882c3c42c..21772edbc 100644 --- a/chained/utp_enabled.go +++ b/proxyimpl/utp_enabled.go @@ -1,6 +1,6 @@ //go:build !android && !ios && !linux -package chained +package proxyimpl import ( "context" diff --git a/chained/wss_impl.go b/proxyimpl/wss.go similarity index 91% rename from chained/wss_impl.go rename to proxyimpl/wss.go index e1f996f9b..0accf172a 100644 --- a/chained/wss_impl.go +++ b/proxyimpl/wss.go @@ -1,4 +1,4 @@ -package chained +package proxyimpl import ( "context" @@ -17,12 +17,12 @@ import ( ) type wssImpl struct { - reportDialCore reportDialCoreFn + reportDialCore ReportDialCoreFn addr string dialer tinywss.Client } -func newWSSImpl(addr string, pc *config.ProxyConfig, reportDialCore reportDialCoreFn) (proxyImpl, error) { +func newWSSImpl(addr string, pc *config.ProxyConfig, reportDialCore ReportDialCoreFn) (ProxyImpl, error) { var rt tinywss.RoundTripHijacker var err error @@ -57,12 +57,12 @@ func newWSSImpl(addr string, pc *config.ProxyConfig, reportDialCore reportDialCo return &wssImpl{reportDialCore, addr, client}, nil } -func (impl *wssImpl) close() { +func (impl *wssImpl) Close() { log.Debug("Closing wss session: Proxy closed.") impl.dialer.Close() } -func (impl *wssImpl) dialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { +func (impl *wssImpl) DialServer(op *ops.Op, ctx context.Context) (net.Conn, error) { return impl.reportDialCore(op, func() (net.Conn, error) { return impl.dialer.DialContext(ctx) }) @@ -72,7 +72,7 @@ func wssHTTPRoundTripper(s *config.ProxyConfig) (tinywss.RoundTripHijacker, erro return tinywss.NewRoundTripper(func(network, addr string) (net.Conn, error) { log.Debugf("tinywss HTTP Roundtripper dialing %v", addr) // the configured proxy address is always contacted - return netx.DialTimeout(network, addr, chainedDialTimeout) + return netx.DialTimeout(network, addr, ChainedDialTimeout) }), nil } @@ -119,7 +119,7 @@ func wssHTTPSRoundTripper(pc *config.ProxyConfig) (tinywss.RoundTripHijacker, er ForceValidateName: forceValidateName, Config: tlsConf, ClientHelloID: helloID, - Timeout: chainedDialTimeout, + Timeout: ChainedDialTimeout, } // the configured proxy address is always contacted. return td.Dial(network, addr) From bca53ace1112c06c6e267277674ef5ec38ee02e3 Mon Sep 17 00:00:00 2001 From: Alec Soltzen <83119415+soltzen@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:52:22 +0200 Subject: [PATCH 2/5] [balancer] Add Implementation() to extract a ProxyImpl from a Dialer --- balancer/balancer.go | 11 +++++++---- balancer/test_dialer.go | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/balancer/balancer.go b/balancer/balancer.go index c5c75d811..1b5d77429 100644 --- a/balancer/balancer.go +++ b/balancer/balancer.go @@ -16,6 +16,7 @@ import ( "github.com/getlantern/errors" "github.com/getlantern/flashlight/ops" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/golog" ) @@ -129,6 +130,8 @@ type Dialer interface { Stop() WriteStats(w io.Writer) + + Implementation() proxyimpl.ProxyImpl } type dialStats struct { @@ -231,10 +234,10 @@ func (b *Balancer) ResetFromExisting() { // Dial dials (network, addr) using one of the currently active configured // Dialers. The dialer is chosen based on the following ordering: // -// - succeeding dialers are preferred to failing -// - dialers whose bandwidth is unknown are preferred to those whose bandwidth -// is known (in order to collect data) -// - faster dialers (based on bandwidth / RTT) are preferred to slower ones +// - succeeding dialers are preferred to failing +// - dialers whose bandwidth is unknown are preferred to those whose bandwidth +// is known (in order to collect data) +// - faster dialers (based on bandwidth / RTT) are preferred to slower ones // // Only Trusted Dialers are used to dial HTTP hosts. // diff --git a/balancer/test_dialer.go b/balancer/test_dialer.go index 8fc34f047..cbd3ad8af 100644 --- a/balancer/test_dialer.go +++ b/balancer/test_dialer.go @@ -11,6 +11,7 @@ import ( "sync/atomic" "time" + "github.com/getlantern/flashlight/proxyimpl" "github.com/getlantern/mockconn" ) @@ -183,3 +184,5 @@ func (d *testDialer) Stop() { } func (d *testDialer) WriteStats(w io.Writer) {} + +func (d *testDialer) Implementation() proxyimpl.ProxyImpl { return nil } From dc808167c643d5b35df786d9f4de07582330579e Mon Sep 17 00:00:00 2001 From: Alec Soltzen <83119415+soltzen@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:52:58 +0200 Subject: [PATCH 3/5] [integrationtest] Revamp integrationtest package --- integrationtest/.gitignore | 1 + integrationtest/README.md | 13 + integrationtest/global-cfg.yaml | 10230 ---------------- integrationtest/go.mod | 253 + integrationtest/go.sum | 1486 +++ integrationtest/integrationtest.go | 638 - integrationtest/integrationtest_nonutp.go | 16 - integrationtest/integrationtest_utp.go | 10 - integrationtest/main.go | 113 + integrationtest/projectpath/projectpath.go | 13 + integrationtest/proxies-template.yaml | 7 - integrationtest/testcases/default.go | 42 + integrationtest/testcases/testcases.go | 126 + integrationtest/testparams/dummy.go | 17 + integrationtest/testparams/http.go | 20 + integrationtest/testparams/https.go | 22 + .../testparams/shadowsocks-nomultiplex.go | 28 + integrationtest/testparams/testparams.go | 25 + integrationtest/testrunner/testrunner.go | 277 + integrationtest/util/util.go | 56 + 20 files changed, 2492 insertions(+), 10901 deletions(-) create mode 100644 integrationtest/.gitignore create mode 100644 integrationtest/README.md delete mode 100644 integrationtest/global-cfg.yaml create mode 100644 integrationtest/go.mod create mode 100644 integrationtest/go.sum delete mode 100644 integrationtest/integrationtest.go delete mode 100644 integrationtest/integrationtest_nonutp.go delete mode 100644 integrationtest/integrationtest_utp.go create mode 100644 integrationtest/main.go create mode 100644 integrationtest/projectpath/projectpath.go delete mode 100644 integrationtest/proxies-template.yaml create mode 100644 integrationtest/testcases/default.go create mode 100644 integrationtest/testcases/testcases.go create mode 100644 integrationtest/testparams/dummy.go create mode 100644 integrationtest/testparams/http.go create mode 100644 integrationtest/testparams/https.go create mode 100644 integrationtest/testparams/shadowsocks-nomultiplex.go create mode 100644 integrationtest/testparams/testparams.go create mode 100644 integrationtest/testrunner/testrunner.go create mode 100644 integrationtest/util/util.go diff --git a/integrationtest/.gitignore b/integrationtest/.gitignore new file mode 100644 index 000000000..21b7383cd --- /dev/null +++ b/integrationtest/.gitignore @@ -0,0 +1 @@ +integrationtest.log diff --git a/integrationtest/README.md b/integrationtest/README.md new file mode 100644 index 000000000..333691b73 --- /dev/null +++ b/integrationtest/README.md @@ -0,0 +1,13 @@ +Flashlight integration tester + +This tool runs a series of integration tests against a local Flashlight client and a local http-proxy-lantern instance. + +## Usage + + go run . -test + // Runs the specified test. If no test name is specified, runs all tests. + + List of supported tests: + - http + - https + - shadowsocks-no-multiplex diff --git a/integrationtest/global-cfg.yaml b/integrationtest/global-cfg.yaml deleted file mode 100644 index b60a2fe95..000000000 --- a/integrationtest/global-cfg.yaml +++ /dev/null @@ -1,10230 +0,0 @@ -version: 11 -cloudconfig: http://config.getiantem.org/cloud.yaml.gz -cloudconfigca: "" -frontedcloudconfig: "" -cpuprofile: "" -memprofile: "" -updateserverurl: https://update.getlantern.org -bordareportinterval: "10s" -bordasamplepercentage: 0 -client: - minqos: 0 - deviceid: hDg1WzFA - proxiedconnectports: - - 80 - - 443 - - 8080 - - 8443 - - 5222 - - 5223 - - 5224 - - 5228 - - 5229 - - 7300 - - 19305 - - 19306 - - 19307 - - 19308 - - 19309 - dumpheaders: false - chainedservers: - fallback-template: - addr: - pipelined: false - cert: "" - authtoken: - weight: 1000000 - qos: 10 - trusted: true - masqueradesets: - cloudflare: [] - cloudfront: - - domain: cloudfront.net - ipaddress: 52.84.0.140 - - domain: cloudfront.net - ipaddress: 52.84.0.31 - - domain: cloudfront.net - ipaddress: 52.84.0.73 - - domain: cloudfront.net - ipaddress: 52.84.0.111 - - domain: cloudfront.net - ipaddress: 52.84.0.110 - - domain: cloudfront.net - ipaddress: 52.84.0.143 - - domain: cloudfront.net - ipaddress: 52.84.0.116 - - domain: cloudfront.net - ipaddress: 52.84.0.8 - - domain: cloudfront.net - ipaddress: 52.84.0.104 - - domain: cloudfront.net - ipaddress: 52.84.0.146 - - domain: cloudfront.net - ipaddress: 52.84.0.145 - - domain: cloudfront.net - ipaddress: 52.84.0.151 - - domain: cloudfront.net - ipaddress: 52.84.0.15 - - domain: cloudfront.net - ipaddress: 52.84.0.42 - - domain: cloudfront.net - ipaddress: 52.84.0.133 - - domain: cloudfront.net - ipaddress: 52.84.0.134 - - domain: cloudfront.net - ipaddress: 52.84.0.118 - - domain: cloudfront.net - ipaddress: 52.84.0.98 - - domain: cloudfront.net - ipaddress: 52.84.0.109 - - domain: cloudfront.net - ipaddress: 52.84.0.150 - - domain: cloudfront.net - ipaddress: 52.84.0.115 - - domain: cloudfront.net - ipaddress: 52.84.0.139 - - domain: cloudfront.net - ipaddress: 52.84.0.76 - - domain: cloudfront.net - ipaddress: 52.84.0.131 - - domain: cloudfront.net - ipaddress: 52.84.0.126 - - domain: cloudfront.net - ipaddress: 52.84.0.4 - - domain: cloudfront.net - ipaddress: 52.84.0.130 - - domain: cloudfront.net - ipaddress: 52.84.0.117 - - domain: cloudfront.net - ipaddress: 52.84.0.107 - - domain: cloudfront.net - ipaddress: 52.84.0.95 - - domain: cloudfront.net - ipaddress: 52.84.0.35 - - domain: cloudfront.net - ipaddress: 52.84.0.119 - - domain: cloudfront.net - ipaddress: 52.84.0.12 - - domain: cloudfront.net - ipaddress: 52.84.0.113 - - domain: cloudfront.net - ipaddress: 52.84.0.94 - - domain: cloudfront.net - ipaddress: 52.84.0.129 - - domain: cloudfront.net - ipaddress: 52.84.0.21 - - domain: cloudfront.net - ipaddress: 52.84.0.123 - - domain: cloudfront.net - ipaddress: 52.84.0.16 - - domain: cloudfront.net - ipaddress: 52.84.0.120 - - domain: cloudfront.net - ipaddress: 52.84.0.132 - - domain: cloudfront.net - ipaddress: 52.84.0.36 - - domain: cloudfront.net - ipaddress: 52.84.0.41 - - domain: cloudfront.net - ipaddress: 52.84.0.24 - - domain: cloudfront.net - ipaddress: 52.84.0.22 - - domain: cloudfront.net - ipaddress: 52.84.0.14 - - domain: cloudfront.net - ipaddress: 52.84.0.72 - - domain: cloudfront.net - ipaddress: 52.84.0.10 - - domain: cloudfront.net - ipaddress: 52.84.0.26 - - domain: cloudfront.net - ipaddress: 52.84.0.13 - - domain: cloudfront.net - ipaddress: 52.84.0.32 - - domain: cloudfront.net - ipaddress: 52.84.0.23 - - domain: cloudfront.net - ipaddress: 52.84.0.28 - - domain: cloudfront.net - ipaddress: 52.84.0.60 - - domain: cloudfront.net - ipaddress: 52.84.0.54 - - domain: cloudfront.net - ipaddress: 52.84.0.38 - - domain: cloudfront.net - ipaddress: 52.84.0.50 - - domain: cloudfront.net - ipaddress: 52.84.0.18 - - domain: cloudfront.net - ipaddress: 52.84.0.46 - - domain: cloudfront.net - ipaddress: 52.84.0.58 - - domain: cloudfront.net - ipaddress: 52.84.0.75 - - domain: cloudfront.net - ipaddress: 52.84.0.64 - - domain: cloudfront.net - ipaddress: 52.84.0.48 - - domain: cloudfront.net - ipaddress: 52.84.0.37 - - domain: cloudfront.net - ipaddress: 52.84.0.97 - - domain: cloudfront.net - ipaddress: 52.84.0.63 - - domain: cloudfront.net - ipaddress: 52.84.0.39 - - domain: cloudfront.net - ipaddress: 52.84.0.180 - - domain: cloudfront.net - ipaddress: 52.84.0.183 - - domain: cloudfront.net - ipaddress: 52.84.0.80 - - domain: cloudfront.net - ipaddress: 52.84.0.65 - - domain: cloudfront.net - ipaddress: 52.84.0.84 - - domain: cloudfront.net - ipaddress: 52.84.0.79 - - domain: cloudfront.net - ipaddress: 52.84.0.74 - - domain: cloudfront.net - ipaddress: 52.84.0.92 - - domain: cloudfront.net - ipaddress: 52.84.0.44 - - domain: cloudfront.net - ipaddress: 52.84.0.101 - - domain: cloudfront.net - ipaddress: 52.84.0.17 - - domain: cloudfront.net - ipaddress: 52.84.0.61 - - domain: cloudfront.net - ipaddress: 52.84.0.57 - - domain: cloudfront.net - ipaddress: 52.84.0.66 - - domain: cloudfront.net - ipaddress: 52.84.0.7 - - domain: cloudfront.net - ipaddress: 52.84.0.5 - - domain: cloudfront.net - ipaddress: 52.84.0.55 - - domain: cloudfront.net - ipaddress: 52.84.0.105 - - domain: cloudfront.net - ipaddress: 52.84.0.83 - - domain: cloudfront.net - ipaddress: 52.84.0.49 - - domain: cloudfront.net - ipaddress: 52.84.0.102 - - domain: cloudfront.net - ipaddress: 52.84.0.106 - - domain: cloudfront.net - ipaddress: 52.84.0.85 - - domain: cloudfront.net - ipaddress: 52.84.0.27 - - domain: cloudfront.net - ipaddress: 52.84.0.19 - - domain: cloudfront.net - ipaddress: 52.84.0.148 - - domain: cloudfront.net - ipaddress: 52.84.0.82 - - domain: cloudfront.net - ipaddress: 52.84.0.87 - - domain: cloudfront.net - ipaddress: 52.84.0.96 - - domain: cloudfront.net - ipaddress: 52.84.0.90 - - domain: cloudfront.net - ipaddress: 52.84.0.43 - - domain: cloudfront.net - ipaddress: 52.84.0.34 - - domain: cloudfront.net - ipaddress: 52.84.0.125 - - domain: cloudfront.net - ipaddress: 52.84.0.121 - - domain: cloudfront.net - ipaddress: 52.84.0.91 - - domain: cloudfront.net - ipaddress: 52.84.0.112 - - domain: cloudfront.net - ipaddress: 52.84.0.108 - - domain: cloudfront.net - ipaddress: 52.84.0.68 - - domain: cloudfront.net - ipaddress: 52.84.0.77 - - domain: cloudfront.net - ipaddress: 52.84.0.89 - - domain: cloudfront.net - ipaddress: 52.84.0.184 - - domain: cloudfront.net - ipaddress: 52.84.0.70 - - domain: cloudfront.net - ipaddress: 52.84.0.99 - - domain: cloudfront.net - ipaddress: 52.84.0.88 - - domain: cloudfront.net - ipaddress: 52.84.0.172 - - domain: cloudfront.net - ipaddress: 52.84.0.100 - - domain: cloudfront.net - ipaddress: 52.84.0.154 - - domain: cloudfront.net - ipaddress: 52.84.0.155 - - domain: cloudfront.net - ipaddress: 52.84.0.136 - - domain: cloudfront.net - ipaddress: 52.84.0.165 - - domain: cloudfront.net - ipaddress: 52.84.0.124 - - domain: cloudfront.net - ipaddress: 52.84.0.137 - - domain: cloudfront.net - ipaddress: 52.84.0.144 - - domain: cloudfront.net - ipaddress: 52.84.0.147 - - domain: cloudfront.net - ipaddress: 52.84.0.142 - - domain: cloudfront.net - ipaddress: 52.84.0.162 - - domain: cloudfront.net - ipaddress: 52.84.0.161 - - domain: cloudfront.net - ipaddress: 52.84.0.153 - - domain: cloudfront.net - ipaddress: 52.84.0.122 - - domain: cloudfront.net - ipaddress: 52.84.0.163 - - domain: cloudfront.net - ipaddress: 52.84.0.158 - - domain: cloudfront.net - ipaddress: 52.84.0.176 - - domain: cloudfront.net - ipaddress: 54.239.192.5 - - domain: cloudfront.net - ipaddress: 54.239.192.6 - - domain: cloudfront.net - ipaddress: 54.239.192.4 - - domain: cloudfront.net - ipaddress: 54.239.192.7 - - domain: cloudfront.net - ipaddress: 54.239.192.8 - - domain: cloudfront.net - ipaddress: 52.84.0.182 - - domain: cloudfront.net - ipaddress: 52.84.0.168 - - domain: cloudfront.net - ipaddress: 52.84.0.157 - - domain: cloudfront.net - ipaddress: 52.84.0.174 - - domain: cloudfront.net - ipaddress: 52.84.0.169 - - domain: cloudfront.net - ipaddress: 52.84.0.170 - - domain: cloudfront.net - ipaddress: 52.84.0.175 - - domain: cloudfront.net - ipaddress: 52.84.0.179 - - domain: cloudfront.net - ipaddress: 52.84.0.156 - - domain: cloudfront.net - ipaddress: 52.84.0.159 - - domain: cloudfront.net - ipaddress: 52.84.0.177 - - domain: cloudfront.net - ipaddress: 52.84.0.171 - - domain: cloudfront.net - ipaddress: 52.84.0.178 - - domain: cloudfront.net - ipaddress: 52.84.0.166 - - domain: cloudfront.net - ipaddress: 52.84.0.141 - - domain: cloudfront.net - ipaddress: 52.84.0.138 - - domain: cloudfront.net - ipaddress: 52.84.0.93 - - domain: cloudfront.net - ipaddress: 52.84.0.40 - - domain: cloudfront.net - ipaddress: 52.84.0.81 - - domain: cloudfront.net - ipaddress: 52.84.0.56 - - domain: cloudfront.net - ipaddress: 52.84.0.47 - - domain: cloudfront.net - ipaddress: 52.84.0.62 - - domain: cloudfront.net - ipaddress: 52.84.0.173 - - domain: cloudfront.net - ipaddress: 52.84.0.45 - - domain: cloudfront.net - ipaddress: 52.84.0.51 - - domain: cloudfront.net - ipaddress: 52.84.0.78 - - domain: cloudfront.net - ipaddress: 52.84.0.149 - - domain: cloudfront.net - ipaddress: 52.84.0.59 - - domain: cloudfront.net - ipaddress: 52.84.0.185 - - domain: cloudfront.net - ipaddress: 52.84.0.53 - - domain: cloudfront.net - ipaddress: 52.84.0.189 - - domain: cloudfront.net - ipaddress: 52.84.0.187 - - domain: cloudfront.net - ipaddress: 52.84.0.190 - - domain: cloudfront.net - ipaddress: 52.84.0.188 - - domain: cloudfront.net - ipaddress: 52.84.0.186 - - domain: cloudfront.net - ipaddress: 54.239.192.9 - - domain: cloudfront.net - ipaddress: 52.84.0.191 - - domain: cloudfront.net - ipaddress: 54.239.192.10 - - domain: cloudfront.net - ipaddress: 54.239.192.11 - - domain: cloudfront.net - ipaddress: 54.239.192.12 - - domain: cloudfront.net - ipaddress: 54.239.192.13 - - domain: cloudfront.net - ipaddress: 54.239.192.14 - - domain: cloudfront.net - ipaddress: 54.239.192.15 - - domain: cloudfront.net - ipaddress: 54.239.192.16 - - domain: cloudfront.net - ipaddress: 54.239.192.18 - - domain: cloudfront.net - ipaddress: 54.239.192.19 - - domain: cloudfront.net - ipaddress: 54.239.192.20 - - domain: cloudfront.net - ipaddress: 52.84.0.192 - - domain: cloudfront.net - ipaddress: 54.239.192.21 - - domain: cloudfront.net - ipaddress: 54.239.192.22 - - domain: cloudfront.net - ipaddress: 52.84.0.193 - - domain: cloudfront.net - ipaddress: 54.239.192.23 - - domain: cloudfront.net - ipaddress: 52.84.0.194 - - domain: cloudfront.net - ipaddress: 54.239.192.24 - - domain: cloudfront.net - ipaddress: 52.84.0.196 - - domain: cloudfront.net - ipaddress: 54.239.192.25 - - domain: cloudfront.net - ipaddress: 52.84.0.197 - - domain: cloudfront.net - ipaddress: 52.84.0.198 - - domain: cloudfront.net - ipaddress: 54.239.192.26 - - domain: cloudfront.net - ipaddress: 52.84.0.199 - - domain: cloudfront.net - ipaddress: 54.240.131.251 - - domain: cloudfront.net - ipaddress: 54.240.131.252 - - domain: cloudfront.net - ipaddress: 54.240.131.253 - - domain: cloudfront.net - ipaddress: 54.240.131.254 - - domain: cloudfront.net - ipaddress: 54.239.192.28 - - domain: cloudfront.net - ipaddress: 52.84.0.200 - - domain: cloudfront.net - ipaddress: 54.239.192.29 - - domain: cloudfront.net - ipaddress: 52.84.0.201 - - domain: cloudfront.net - ipaddress: 52.84.0.204 - - domain: cloudfront.net - ipaddress: 52.84.0.205 - - domain: cloudfront.net - ipaddress: 52.84.0.206 - - domain: cloudfront.net - ipaddress: 54.239.192.30 - - domain: cloudfront.net - ipaddress: 52.84.0.207 - - domain: cloudfront.net - ipaddress: 54.239.192.31 - - domain: cloudfront.net - ipaddress: 52.84.0.208 - - domain: cloudfront.net - ipaddress: 54.239.192.32 - - domain: cloudfront.net - ipaddress: 52.84.0.210 - - domain: cloudfront.net - ipaddress: 52.84.0.209 - - domain: cloudfront.net - ipaddress: 52.84.0.211 - - domain: cloudfront.net - ipaddress: 52.84.0.212 - - domain: cloudfront.net - ipaddress: 54.239.192.33 - - domain: cloudfront.net - ipaddress: 52.84.0.213 - - domain: cloudfront.net - ipaddress: 54.239.192.34 - - domain: cloudfront.net - ipaddress: 54.239.192.35 - - domain: cloudfront.net - ipaddress: 52.84.0.214 - - domain: cloudfront.net - ipaddress: 54.239.192.36 - - domain: cloudfront.net - ipaddress: 54.239.192.37 - - domain: cloudfront.net - ipaddress: 54.239.192.38 - - domain: cloudfront.net - ipaddress: 54.239.192.39 - - domain: cloudfront.net - ipaddress: 54.239.192.40 - - domain: cloudfront.net - ipaddress: 54.239.192.41 - - domain: cloudfront.net - ipaddress: 54.239.192.42 - - domain: cloudfront.net - ipaddress: 54.239.192.43 - - domain: cloudfront.net - ipaddress: 52.84.0.216 - - domain: cloudfront.net - ipaddress: 54.239.192.44 - - domain: cloudfront.net - ipaddress: 54.239.192.45 - - domain: cloudfront.net - ipaddress: 54.239.192.46 - - domain: cloudfront.net - ipaddress: 52.84.0.217 - - domain: cloudfront.net - ipaddress: 52.84.0.218 - - domain: cloudfront.net - ipaddress: 54.239.192.47 - - domain: cloudfront.net - ipaddress: 52.84.0.220 - - domain: cloudfront.net - ipaddress: 54.239.192.48 - - domain: cloudfront.net - ipaddress: 52.84.0.222 - - domain: cloudfront.net - ipaddress: 52.84.0.223 - - domain: cloudfront.net - ipaddress: 54.239.192.49 - - domain: cloudfront.net - ipaddress: 52.84.0.224 - - domain: cloudfront.net - ipaddress: 52.84.0.225 - - domain: cloudfront.net - ipaddress: 54.239.192.50 - - domain: cloudfront.net - ipaddress: 52.84.0.226 - - domain: cloudfront.net - ipaddress: 52.84.0.227 - - domain: cloudfront.net - ipaddress: 54.239.192.51 - - domain: cloudfront.net - ipaddress: 52.84.0.228 - - domain: cloudfront.net - ipaddress: 52.84.0.229 - - domain: cloudfront.net - ipaddress: 54.239.192.52 - - domain: cloudfront.net - ipaddress: 54.239.192.53 - - domain: cloudfront.net - ipaddress: 52.84.0.230 - - domain: cloudfront.net - ipaddress: 54.239.192.54 - - domain: cloudfront.net - ipaddress: 54.239.192.55 - - domain: cloudfront.net - ipaddress: 52.84.0.231 - - domain: cloudfront.net - ipaddress: 54.239.192.56 - - domain: cloudfront.net - ipaddress: 52.84.0.232 - - domain: cloudfront.net - ipaddress: 54.239.192.57 - - domain: cloudfront.net - ipaddress: 52.84.0.233 - - domain: cloudfront.net - ipaddress: 54.239.192.58 - - domain: cloudfront.net - ipaddress: 54.239.192.59 - - domain: cloudfront.net - ipaddress: 52.84.0.234 - - domain: cloudfront.net - ipaddress: 54.239.192.60 - - domain: cloudfront.net - ipaddress: 52.84.0.235 - - domain: cloudfront.net - ipaddress: 54.239.192.61 - - domain: cloudfront.net - ipaddress: 54.239.192.62 - - domain: cloudfront.net - ipaddress: 54.239.192.63 - - domain: cloudfront.net - ipaddress: 52.84.0.236 - - domain: cloudfront.net - ipaddress: 52.84.0.237 - - domain: cloudfront.net - ipaddress: 52.84.0.238 - - domain: cloudfront.net - ipaddress: 54.239.192.64 - - domain: cloudfront.net - ipaddress: 52.84.0.239 - - domain: cloudfront.net - ipaddress: 52.84.0.240 - - domain: cloudfront.net - ipaddress: 54.239.192.66 - - domain: cloudfront.net - ipaddress: 52.84.0.241 - - domain: cloudfront.net - ipaddress: 54.239.192.67 - - domain: cloudfront.net - ipaddress: 54.239.192.68 - - domain: cloudfront.net - ipaddress: 52.84.0.243 - - domain: cloudfront.net - ipaddress: 52.84.0.244 - - domain: cloudfront.net - ipaddress: 54.239.192.69 - - domain: cloudfront.net - ipaddress: 52.84.0.245 - - domain: cloudfront.net - ipaddress: 52.84.0.246 - - domain: cloudfront.net - ipaddress: 54.239.192.70 - - domain: cloudfront.net - ipaddress: 52.84.0.247 - - domain: cloudfront.net - ipaddress: 54.239.192.71 - - domain: cloudfront.net - ipaddress: 54.239.192.72 - - domain: cloudfront.net - ipaddress: 54.239.192.73 - - domain: cloudfront.net - ipaddress: 52.84.0.249 - - domain: cloudfront.net - ipaddress: 52.84.0.250 - - domain: cloudfront.net - ipaddress: 54.239.192.74 - - domain: cloudfront.net - ipaddress: 52.84.0.251 - - domain: cloudfront.net - ipaddress: 54.239.192.75 - - domain: cloudfront.net - ipaddress: 54.239.192.76 - - domain: cloudfront.net - ipaddress: 52.84.0.252 - - domain: cloudfront.net - ipaddress: 54.239.192.77 - - domain: cloudfront.net - ipaddress: 54.239.192.78 - - domain: cloudfront.net - ipaddress: 54.239.192.79 - - domain: cloudfront.net - ipaddress: 52.84.0.253 - - domain: cloudfront.net - ipaddress: 54.239.192.80 - - domain: cloudfront.net - ipaddress: 54.239.192.81 - - domain: cloudfront.net - ipaddress: 54.239.192.82 - - domain: cloudfront.net - ipaddress: 52.84.0.254 - - domain: cloudfront.net - ipaddress: 54.239.192.83 - - domain: cloudfront.net - ipaddress: 54.239.192.84 - - domain: cloudfront.net - ipaddress: 54.239.192.85 - - domain: cloudfront.net - ipaddress: 54.239.192.86 - - domain: cloudfront.net - ipaddress: 54.239.192.88 - - domain: cloudfront.net - ipaddress: 54.239.192.89 - - domain: cloudfront.net - ipaddress: 54.239.192.90 - - domain: cloudfront.net - ipaddress: 54.239.192.91 - - domain: cloudfront.net - ipaddress: 54.239.192.92 - - domain: cloudfront.net - ipaddress: 54.239.192.93 - - domain: cloudfront.net - ipaddress: 54.239.192.94 - - domain: cloudfront.net - ipaddress: 54.239.192.95 - - domain: cloudfront.net - ipaddress: 54.239.192.96 - - domain: cloudfront.net - ipaddress: 54.239.192.97 - - domain: cloudfront.net - ipaddress: 54.239.192.98 - - domain: cloudfront.net - ipaddress: 54.239.192.99 - - domain: cloudfront.net - ipaddress: 54.239.192.100 - - domain: cloudfront.net - ipaddress: 54.239.192.101 - - domain: cloudfront.net - ipaddress: 54.239.192.102 - - domain: cloudfront.net - ipaddress: 54.239.192.103 - - domain: cloudfront.net - ipaddress: 54.239.192.104 - - domain: cloudfront.net - ipaddress: 54.239.192.105 - - domain: cloudfront.net - ipaddress: 54.239.192.106 - - domain: cloudfront.net - ipaddress: 54.239.192.107 - - domain: cloudfront.net - ipaddress: 54.239.192.108 - - domain: cloudfront.net - ipaddress: 54.239.192.110 - - domain: cloudfront.net - ipaddress: 54.239.192.111 - - domain: cloudfront.net - ipaddress: 54.239.192.112 - - domain: cloudfront.net - ipaddress: 54.239.192.113 - - domain: cloudfront.net - ipaddress: 54.239.192.114 - - domain: cloudfront.net - ipaddress: 54.239.192.115 - - domain: cloudfront.net - ipaddress: 54.239.192.116 - - domain: cloudfront.net - ipaddress: 54.239.192.117 - - domain: cloudfront.net - ipaddress: 54.239.192.118 - - domain: cloudfront.net - ipaddress: 54.239.192.119 - - domain: cloudfront.net - ipaddress: 54.239.192.120 - - domain: cloudfront.net - ipaddress: 54.239.192.121 - - domain: cloudfront.net - ipaddress: 54.239.192.122 - - domain: cloudfront.net - ipaddress: 54.239.192.123 - - domain: cloudfront.net - ipaddress: 54.239.192.124 - - domain: cloudfront.net - ipaddress: 54.239.192.125 - - domain: cloudfront.net - ipaddress: 54.239.192.126 - - domain: cloudfront.net - ipaddress: 54.239.192.127 - - domain: cloudfront.net - ipaddress: 54.239.192.128 - - domain: cloudfront.net - ipaddress: 54.239.192.129 - - domain: cloudfront.net - ipaddress: 54.239.192.130 - - domain: cloudfront.net - ipaddress: 54.239.192.131 - - domain: cloudfront.net - ipaddress: 54.239.192.132 - - domain: cloudfront.net - ipaddress: 54.239.192.133 - - domain: cloudfront.net - ipaddress: 54.239.192.134 - - domain: cloudfront.net - ipaddress: 54.239.192.136 - - domain: cloudfront.net - ipaddress: 54.239.192.137 - - domain: cloudfront.net - ipaddress: 54.239.192.139 - - domain: cloudfront.net - ipaddress: 54.239.192.140 - - domain: cloudfront.net - ipaddress: 54.239.192.141 - - domain: cloudfront.net - ipaddress: 54.239.192.142 - - domain: cloudfront.net - ipaddress: 54.239.192.143 - - domain: cloudfront.net - ipaddress: 54.239.192.144 - - domain: cloudfront.net - ipaddress: 54.239.192.145 - - domain: cloudfront.net - ipaddress: 54.239.192.146 - - domain: cloudfront.net - ipaddress: 54.239.192.147 - - domain: cloudfront.net - ipaddress: 54.239.192.148 - - domain: cloudfront.net - ipaddress: 54.239.192.149 - - domain: cloudfront.net - ipaddress: 54.239.192.150 - - domain: cloudfront.net - ipaddress: 54.239.192.151 - - domain: cloudfront.net - ipaddress: 54.239.192.152 - - domain: cloudfront.net - ipaddress: 54.239.192.153 - - domain: cloudfront.net - ipaddress: 54.239.192.154 - - domain: cloudfront.net - ipaddress: 54.239.192.155 - - domain: cloudfront.net - ipaddress: 54.239.192.156 - - domain: cloudfront.net - ipaddress: 54.239.192.157 - - domain: cloudfront.net - ipaddress: 54.239.192.158 - - domain: cloudfront.net - ipaddress: 54.239.192.159 - - domain: cloudfront.net - ipaddress: 54.239.192.160 - - domain: cloudfront.net - ipaddress: 54.239.192.162 - - domain: cloudfront.net - ipaddress: 54.239.192.163 - - domain: cloudfront.net - ipaddress: 54.239.192.164 - - domain: cloudfront.net - ipaddress: 54.239.192.165 - - domain: cloudfront.net - ipaddress: 54.239.192.166 - - domain: cloudfront.net - ipaddress: 54.239.192.167 - - domain: cloudfront.net - ipaddress: 54.239.192.168 - - domain: cloudfront.net - ipaddress: 54.239.192.169 - - domain: cloudfront.net - ipaddress: 54.239.192.170 - - domain: cloudfront.net - ipaddress: 54.239.192.171 - - domain: cloudfront.net - ipaddress: 54.239.192.172 - - domain: cloudfront.net - ipaddress: 54.239.192.173 - - domain: cloudfront.net - ipaddress: 54.239.192.174 - - domain: cloudfront.net - ipaddress: 54.239.192.175 - - domain: cloudfront.net - ipaddress: 54.239.192.176 - - domain: cloudfront.net - ipaddress: 54.239.192.177 - - domain: cloudfront.net - ipaddress: 54.239.192.178 - - domain: cloudfront.net - ipaddress: 54.239.192.179 - - domain: cloudfront.net - ipaddress: 54.239.192.180 - - domain: cloudfront.net - ipaddress: 54.239.192.181 - - domain: cloudfront.net - ipaddress: 54.239.192.182 - - domain: cloudfront.net - ipaddress: 54.239.192.183 - - domain: cloudfront.net - ipaddress: 54.239.192.184 - - domain: cloudfront.net - ipaddress: 54.239.192.185 - - domain: cloudfront.net - ipaddress: 54.239.192.186 - - domain: cloudfront.net - ipaddress: 54.239.192.187 - - domain: cloudfront.net - ipaddress: 54.239.192.188 - - domain: cloudfront.net - ipaddress: 54.239.192.189 - - domain: cloudfront.net - ipaddress: 54.239.192.190 - - domain: cloudfront.net - ipaddress: 54.239.192.191 - - domain: cloudfront.net - ipaddress: 54.239.192.192 - - domain: cloudfront.net - ipaddress: 54.239.192.193 - - domain: cloudfront.net - ipaddress: 54.239.192.194 - - domain: cloudfront.net - ipaddress: 54.239.192.195 - - domain: cloudfront.net - ipaddress: 54.239.192.196 - - domain: cloudfront.net - ipaddress: 54.239.192.197 - - domain: cloudfront.net - ipaddress: 54.239.192.200 - - domain: cloudfront.net - ipaddress: 54.239.192.201 - - domain: cloudfront.net - ipaddress: 54.239.192.202 - - domain: cloudfront.net - ipaddress: 54.239.192.203 - - domain: cloudfront.net - ipaddress: 54.239.192.204 - - domain: cloudfront.net - ipaddress: 54.239.192.205 - - domain: cloudfront.net - ipaddress: 54.239.192.206 - - domain: cloudfront.net - ipaddress: 54.239.192.207 - - domain: cloudfront.net - ipaddress: 54.239.192.208 - - domain: cloudfront.net - ipaddress: 54.239.192.209 - - domain: cloudfront.net - ipaddress: 54.239.192.210 - - domain: cloudfront.net - ipaddress: 54.239.192.211 - - domain: cloudfront.net - ipaddress: 54.239.192.212 - - domain: cloudfront.net - ipaddress: 54.239.192.213 - - domain: cloudfront.net - ipaddress: 54.239.192.214 - - domain: cloudfront.net - ipaddress: 54.239.192.215 - - domain: cloudfront.net - ipaddress: 54.239.192.216 - - domain: cloudfront.net - ipaddress: 54.239.192.217 - - domain: cloudfront.net - ipaddress: 54.239.192.218 - - domain: cloudfront.net - ipaddress: 54.239.192.219 - - domain: cloudfront.net - ipaddress: 54.239.192.220 - - domain: cloudfront.net - ipaddress: 54.239.192.221 - - domain: cloudfront.net - ipaddress: 54.239.192.222 - - domain: cloudfront.net - ipaddress: 54.239.192.223 - - domain: cloudfront.net - ipaddress: 54.239.192.224 - - domain: cloudfront.net - ipaddress: 54.239.192.225 - - domain: cloudfront.net - ipaddress: 54.239.192.226 - - domain: cloudfront.net - ipaddress: 54.239.192.227 - - domain: cloudfront.net - ipaddress: 54.239.192.228 - - domain: cloudfront.net - ipaddress: 54.239.192.229 - - domain: cloudfront.net - ipaddress: 54.239.192.230 - - domain: cloudfront.net - ipaddress: 54.239.192.232 - - domain: cloudfront.net - ipaddress: 54.239.192.233 - - domain: cloudfront.net - ipaddress: 54.239.192.234 - - domain: cloudfront.net - ipaddress: 54.239.192.235 - - domain: cloudfront.net - ipaddress: 54.239.192.236 - - domain: cloudfront.net - ipaddress: 54.239.192.237 - - domain: cloudfront.net - ipaddress: 54.239.192.238 - - domain: cloudfront.net - ipaddress: 54.239.192.239 - - domain: cloudfront.net - ipaddress: 54.239.192.240 - - domain: cloudfront.net - ipaddress: 54.239.192.241 - - domain: cloudfront.net - ipaddress: 54.239.192.242 - - domain: cloudfront.net - ipaddress: 54.239.192.243 - - domain: cloudfront.net - ipaddress: 54.239.192.244 - - domain: cloudfront.net - ipaddress: 54.239.192.245 - - domain: cloudfront.net - ipaddress: 54.239.192.246 - - domain: cloudfront.net - ipaddress: 54.239.192.247 - - domain: cloudfront.net - ipaddress: 54.239.192.248 - - domain: cloudfront.net - ipaddress: 54.239.192.249 - - domain: cloudfront.net - ipaddress: 54.239.192.250 - - domain: cloudfront.net - ipaddress: 54.239.192.251 - - domain: cloudfront.net - ipaddress: 54.239.192.252 - - domain: cloudfront.net - ipaddress: 54.239.192.253 - - domain: cloudfront.net - ipaddress: 54.239.192.254 - - domain: cloudfront.net - ipaddress: 54.240.129.2 - - domain: cloudfront.net - ipaddress: 54.240.129.3 - - domain: cloudfront.net - ipaddress: 54.240.129.4 - - domain: cloudfront.net - ipaddress: 54.240.129.5 - - domain: cloudfront.net - ipaddress: 54.240.129.6 - - domain: cloudfront.net - ipaddress: 54.240.129.7 - - domain: cloudfront.net - ipaddress: 54.240.129.8 - - domain: cloudfront.net - ipaddress: 54.240.129.9 - - domain: cloudfront.net - ipaddress: 54.240.129.10 - - domain: cloudfront.net - ipaddress: 54.240.129.11 - - domain: cloudfront.net - ipaddress: 54.240.129.12 - - domain: cloudfront.net - ipaddress: 54.240.129.13 - - domain: cloudfront.net - ipaddress: 54.240.129.14 - - domain: cloudfront.net - ipaddress: 54.240.129.15 - - domain: cloudfront.net - ipaddress: 54.240.129.16 - - domain: cloudfront.net - ipaddress: 54.240.129.17 - - domain: cloudfront.net - ipaddress: 54.240.129.18 - - domain: cloudfront.net - ipaddress: 54.240.129.19 - - domain: cloudfront.net - ipaddress: 54.240.129.20 - - domain: cloudfront.net - ipaddress: 54.240.129.21 - - domain: cloudfront.net - ipaddress: 54.240.129.22 - - domain: cloudfront.net - ipaddress: 54.240.129.23 - - domain: cloudfront.net - ipaddress: 54.240.129.24 - - domain: cloudfront.net - ipaddress: 54.240.129.25 - - domain: cloudfront.net - ipaddress: 54.240.129.26 - - domain: cloudfront.net - ipaddress: 54.240.129.27 - - domain: cloudfront.net - ipaddress: 54.240.129.28 - - domain: cloudfront.net - ipaddress: 54.240.129.29 - - domain: cloudfront.net - ipaddress: 54.240.129.30 - - domain: cloudfront.net - ipaddress: 54.240.129.31 - - domain: cloudfront.net - ipaddress: 54.240.129.32 - - domain: cloudfront.net - ipaddress: 54.240.129.33 - - domain: cloudfront.net - ipaddress: 54.240.129.34 - - domain: cloudfront.net - ipaddress: 54.240.129.35 - - domain: cloudfront.net - ipaddress: 54.240.129.36 - - domain: cloudfront.net - ipaddress: 54.240.129.37 - - domain: cloudfront.net - ipaddress: 54.240.129.38 - - domain: cloudfront.net - ipaddress: 54.240.129.39 - - domain: cloudfront.net - ipaddress: 54.240.129.40 - - domain: cloudfront.net - ipaddress: 54.240.129.41 - - domain: cloudfront.net - ipaddress: 54.240.129.42 - - domain: cloudfront.net - ipaddress: 54.240.129.43 - - domain: cloudfront.net - ipaddress: 54.240.129.44 - - domain: cloudfront.net - ipaddress: 54.240.129.45 - - domain: cloudfront.net - ipaddress: 54.240.129.46 - - domain: cloudfront.net - ipaddress: 54.240.129.47 - - domain: cloudfront.net - ipaddress: 54.240.129.48 - - domain: cloudfront.net - ipaddress: 54.240.129.49 - - domain: cloudfront.net - ipaddress: 54.240.129.50 - - domain: cloudfront.net - ipaddress: 54.240.129.51 - - domain: cloudfront.net - ipaddress: 54.240.129.52 - - domain: cloudfront.net - ipaddress: 54.240.129.53 - - domain: cloudfront.net - ipaddress: 54.240.129.54 - - domain: cloudfront.net - ipaddress: 54.240.129.55 - - domain: cloudfront.net - ipaddress: 54.240.129.56 - - domain: cloudfront.net - ipaddress: 54.240.129.57 - - domain: cloudfront.net - ipaddress: 54.240.129.58 - - domain: cloudfront.net - ipaddress: 54.240.129.59 - - domain: cloudfront.net - ipaddress: 54.240.129.60 - - domain: cloudfront.net - ipaddress: 54.240.129.61 - - domain: cloudfront.net - ipaddress: 54.240.129.62 - - domain: cloudfront.net - ipaddress: 54.240.129.63 - - domain: cloudfront.net - ipaddress: 54.240.129.64 - - domain: cloudfront.net - ipaddress: 54.240.129.65 - - domain: cloudfront.net - ipaddress: 54.240.129.66 - - domain: cloudfront.net - ipaddress: 54.240.129.67 - - domain: cloudfront.net - ipaddress: 54.240.129.68 - - domain: cloudfront.net - ipaddress: 54.240.129.69 - - domain: cloudfront.net - ipaddress: 54.240.129.70 - - domain: cloudfront.net - ipaddress: 54.240.129.71 - - domain: cloudfront.net - ipaddress: 54.240.129.72 - - domain: cloudfront.net - ipaddress: 54.240.129.73 - - domain: cloudfront.net - ipaddress: 54.240.129.74 - - domain: cloudfront.net - ipaddress: 54.240.129.75 - - domain: cloudfront.net - ipaddress: 54.240.129.76 - - domain: cloudfront.net - ipaddress: 54.240.129.77 - - domain: cloudfront.net - ipaddress: 54.240.129.78 - - domain: cloudfront.net - ipaddress: 54.240.129.79 - - domain: cloudfront.net - ipaddress: 54.240.129.80 - - domain: cloudfront.net - ipaddress: 54.240.129.81 - - domain: cloudfront.net - ipaddress: 54.240.129.82 - - domain: cloudfront.net - ipaddress: 54.240.129.83 - - domain: cloudfront.net - ipaddress: 54.240.129.84 - - domain: cloudfront.net - ipaddress: 54.240.129.85 - - domain: cloudfront.net - ipaddress: 54.240.129.86 - - domain: cloudfront.net - ipaddress: 54.240.129.87 - - domain: cloudfront.net - ipaddress: 54.240.129.88 - - domain: cloudfront.net - ipaddress: 54.240.129.89 - - domain: cloudfront.net - ipaddress: 54.240.129.90 - - domain: cloudfront.net - ipaddress: 54.240.129.91 - - domain: cloudfront.net - ipaddress: 54.240.129.92 - - domain: cloudfront.net - ipaddress: 54.240.129.93 - - domain: cloudfront.net - ipaddress: 54.240.129.94 - - domain: cloudfront.net - ipaddress: 54.240.129.95 - - domain: cloudfront.net - ipaddress: 54.240.129.96 - - domain: cloudfront.net - ipaddress: 54.240.129.97 - - domain: cloudfront.net - ipaddress: 54.240.129.98 - - domain: cloudfront.net - ipaddress: 54.240.129.99 - - domain: cloudfront.net - ipaddress: 54.240.129.100 - - domain: cloudfront.net - ipaddress: 54.240.129.101 - - domain: cloudfront.net - ipaddress: 54.240.129.102 - - domain: cloudfront.net - ipaddress: 54.240.129.103 - - domain: cloudfront.net - ipaddress: 54.240.129.104 - - domain: cloudfront.net - ipaddress: 54.240.129.105 - - domain: cloudfront.net - ipaddress: 54.240.129.106 - - domain: cloudfront.net - ipaddress: 54.240.129.107 - - domain: cloudfront.net - ipaddress: 54.240.129.108 - - domain: cloudfront.net - ipaddress: 54.240.129.109 - - domain: cloudfront.net - ipaddress: 54.240.129.110 - - domain: cloudfront.net - ipaddress: 54.240.129.111 - - domain: cloudfront.net - ipaddress: 54.240.129.112 - - domain: cloudfront.net - ipaddress: 54.240.129.113 - - domain: cloudfront.net - ipaddress: 54.240.129.114 - - domain: cloudfront.net - ipaddress: 54.240.129.115 - - domain: cloudfront.net - ipaddress: 54.240.129.116 - - domain: cloudfront.net - ipaddress: 54.240.129.117 - - domain: cloudfront.net - ipaddress: 54.240.129.118 - - domain: cloudfront.net - ipaddress: 54.240.129.119 - - domain: cloudfront.net - ipaddress: 54.240.129.120 - - domain: cloudfront.net - ipaddress: 54.240.129.121 - - domain: cloudfront.net - ipaddress: 54.240.129.122 - - domain: cloudfront.net - ipaddress: 54.240.129.123 - - domain: cloudfront.net - ipaddress: 54.240.129.124 - - domain: cloudfront.net - ipaddress: 54.240.129.125 - - domain: cloudfront.net - ipaddress: 54.240.129.126 - - domain: cloudfront.net - ipaddress: 54.240.129.127 - - domain: cloudfront.net - ipaddress: 54.240.129.128 - - domain: cloudfront.net - ipaddress: 54.240.129.129 - - domain: cloudfront.net - ipaddress: 54.240.129.130 - - domain: cloudfront.net - ipaddress: 54.240.129.133 - - domain: cloudfront.net - ipaddress: 54.240.129.134 - - domain: cloudfront.net - ipaddress: 54.240.129.135 - - domain: cloudfront.net - ipaddress: 54.240.129.136 - - domain: cloudfront.net - ipaddress: 54.240.129.137 - - domain: cloudfront.net - ipaddress: 54.240.129.138 - - domain: cloudfront.net - ipaddress: 54.240.129.139 - - domain: cloudfront.net - ipaddress: 54.240.129.140 - - domain: cloudfront.net - ipaddress: 54.240.129.141 - - domain: cloudfront.net - ipaddress: 54.240.129.142 - - domain: cloudfront.net - ipaddress: 54.240.129.143 - - domain: cloudfront.net - ipaddress: 54.240.129.144 - - domain: cloudfront.net - ipaddress: 54.240.129.145 - - domain: cloudfront.net - ipaddress: 54.240.129.146 - - domain: cloudfront.net - ipaddress: 54.240.129.147 - - domain: cloudfront.net - ipaddress: 54.240.129.148 - - domain: cloudfront.net - ipaddress: 54.240.129.149 - - domain: cloudfront.net - ipaddress: 54.240.129.150 - - domain: cloudfront.net - ipaddress: 54.240.129.151 - - domain: cloudfront.net - ipaddress: 54.240.129.152 - - domain: cloudfront.net - ipaddress: 54.240.129.153 - - domain: cloudfront.net - ipaddress: 54.240.129.154 - - domain: cloudfront.net - ipaddress: 54.240.129.155 - - domain: cloudfront.net - ipaddress: 54.240.129.156 - - domain: cloudfront.net - ipaddress: 54.240.129.157 - - domain: cloudfront.net - ipaddress: 54.240.129.158 - - domain: cloudfront.net - ipaddress: 54.240.129.159 - - domain: cloudfront.net - ipaddress: 54.240.129.160 - - domain: cloudfront.net - ipaddress: 54.240.129.161 - - domain: cloudfront.net - ipaddress: 54.240.129.162 - - domain: cloudfront.net - ipaddress: 54.240.129.163 - - domain: cloudfront.net - ipaddress: 54.240.129.164 - - domain: cloudfront.net - ipaddress: 54.240.129.165 - - domain: cloudfront.net - ipaddress: 54.240.129.166 - - domain: cloudfront.net - ipaddress: 54.240.129.167 - - domain: cloudfront.net - ipaddress: 54.240.129.168 - - domain: cloudfront.net - ipaddress: 54.240.129.169 - - domain: cloudfront.net - ipaddress: 54.240.129.170 - - domain: cloudfront.net - ipaddress: 54.240.129.171 - - domain: cloudfront.net - ipaddress: 54.240.129.172 - - domain: cloudfront.net - ipaddress: 54.240.129.173 - - domain: cloudfront.net - ipaddress: 54.240.129.174 - - domain: cloudfront.net - ipaddress: 54.240.129.175 - - domain: cloudfront.net - ipaddress: 54.240.129.176 - - domain: cloudfront.net - ipaddress: 54.240.129.177 - - domain: cloudfront.net - ipaddress: 54.240.129.178 - - domain: cloudfront.net - ipaddress: 54.240.129.179 - - domain: cloudfront.net - ipaddress: 54.240.129.180 - - domain: cloudfront.net - ipaddress: 54.240.129.181 - - domain: cloudfront.net - ipaddress: 54.240.129.182 - - domain: cloudfront.net - ipaddress: 54.240.129.183 - - domain: cloudfront.net - ipaddress: 54.240.129.184 - - domain: cloudfront.net - ipaddress: 54.240.129.185 - - domain: cloudfront.net - ipaddress: 54.240.129.186 - - domain: cloudfront.net - ipaddress: 54.240.129.187 - - domain: cloudfront.net - ipaddress: 54.240.129.188 - - domain: cloudfront.net - ipaddress: 54.240.129.189 - - domain: cloudfront.net - ipaddress: 54.240.129.190 - - domain: cloudfront.net - ipaddress: 54.240.129.191 - - domain: cloudfront.net - ipaddress: 54.240.129.192 - - domain: cloudfront.net - ipaddress: 54.240.129.193 - - domain: cloudfront.net - ipaddress: 54.240.129.194 - - domain: cloudfront.net - ipaddress: 54.240.129.195 - - domain: cloudfront.net - ipaddress: 54.240.129.196 - - domain: cloudfront.net - ipaddress: 54.240.129.197 - - domain: cloudfront.net - ipaddress: 54.240.129.198 - - domain: cloudfront.net - ipaddress: 54.240.129.199 - - domain: cloudfront.net - ipaddress: 54.240.129.200 - - domain: cloudfront.net - ipaddress: 54.240.129.201 - - domain: cloudfront.net - ipaddress: 54.240.129.202 - - domain: cloudfront.net - ipaddress: 54.240.129.203 - - domain: cloudfront.net - ipaddress: 54.240.129.204 - - domain: cloudfront.net - ipaddress: 54.240.129.205 - - domain: cloudfront.net - ipaddress: 54.240.129.206 - - domain: cloudfront.net - ipaddress: 54.240.129.207 - - domain: cloudfront.net - ipaddress: 54.240.129.208 - - domain: cloudfront.net - ipaddress: 54.240.129.209 - - domain: cloudfront.net - ipaddress: 54.240.129.210 - - domain: cloudfront.net - ipaddress: 54.240.129.211 - - domain: cloudfront.net - ipaddress: 54.240.129.212 - - domain: cloudfront.net - ipaddress: 54.240.129.213 - - domain: cloudfront.net - ipaddress: 54.240.129.214 - - domain: cloudfront.net - ipaddress: 54.240.129.215 - - domain: cloudfront.net - ipaddress: 54.240.129.216 - - domain: cloudfront.net - ipaddress: 54.240.129.217 - - domain: cloudfront.net - ipaddress: 54.240.129.218 - - domain: cloudfront.net - ipaddress: 54.240.129.219 - - domain: cloudfront.net - ipaddress: 54.240.129.220 - - domain: cloudfront.net - ipaddress: 54.240.129.221 - - domain: cloudfront.net - ipaddress: 54.240.129.222 - - domain: cloudfront.net - ipaddress: 54.240.129.223 - - domain: cloudfront.net - ipaddress: 54.240.129.224 - - domain: cloudfront.net - ipaddress: 54.240.129.225 - - domain: cloudfront.net - ipaddress: 54.240.129.226 - - domain: cloudfront.net - ipaddress: 54.240.129.227 - - domain: cloudfront.net - ipaddress: 54.240.129.228 - - domain: cloudfront.net - ipaddress: 54.240.129.229 - - domain: cloudfront.net - ipaddress: 54.240.129.230 - - domain: cloudfront.net - ipaddress: 54.240.129.231 - - domain: cloudfront.net - ipaddress: 54.240.129.232 - - domain: cloudfront.net - ipaddress: 54.240.129.233 - - domain: cloudfront.net - ipaddress: 54.240.129.234 - - domain: cloudfront.net - ipaddress: 54.240.129.235 - - domain: cloudfront.net - ipaddress: 54.240.129.236 - - domain: cloudfront.net - ipaddress: 54.240.129.237 - - domain: cloudfront.net - ipaddress: 54.240.129.238 - - domain: cloudfront.net - ipaddress: 54.240.129.239 - - domain: cloudfront.net - ipaddress: 54.240.129.240 - - domain: cloudfront.net - ipaddress: 54.240.129.242 - - domain: cloudfront.net - ipaddress: 54.240.129.241 - - domain: cloudfront.net - ipaddress: 54.240.129.243 - - domain: cloudfront.net - ipaddress: 54.240.129.244 - - domain: cloudfront.net - ipaddress: 54.240.129.245 - - domain: cloudfront.net - ipaddress: 54.240.129.246 - - domain: cloudfront.net - ipaddress: 54.240.129.247 - - domain: cloudfront.net - ipaddress: 54.240.129.248 - - domain: cloudfront.net - ipaddress: 54.240.129.249 - - domain: cloudfront.net - ipaddress: 54.240.129.250 - - domain: cloudfront.net - ipaddress: 54.240.129.251 - - domain: cloudfront.net - ipaddress: 54.240.129.252 - - domain: cloudfront.net - ipaddress: 54.240.129.253 - - domain: cloudfront.net - ipaddress: 54.240.129.254 - - domain: cloudfront.net - ipaddress: 54.240.130.2 - - domain: cloudfront.net - ipaddress: 54.240.130.3 - - domain: cloudfront.net - ipaddress: 54.240.130.4 - - domain: cloudfront.net - ipaddress: 54.240.130.5 - - domain: cloudfront.net - ipaddress: 54.240.130.6 - - domain: cloudfront.net - ipaddress: 54.240.130.7 - - domain: cloudfront.net - ipaddress: 54.240.130.8 - - domain: cloudfront.net - ipaddress: 54.240.130.9 - - domain: cloudfront.net - ipaddress: 54.240.130.10 - - domain: cloudfront.net - ipaddress: 54.240.130.11 - - domain: cloudfront.net - ipaddress: 54.240.130.12 - - domain: cloudfront.net - ipaddress: 54.240.130.13 - - domain: cloudfront.net - ipaddress: 54.240.130.14 - - domain: cloudfront.net - ipaddress: 54.240.130.15 - - domain: cloudfront.net - ipaddress: 54.240.130.16 - - domain: cloudfront.net - ipaddress: 54.240.130.17 - - domain: cloudfront.net - ipaddress: 54.240.130.18 - - domain: cloudfront.net - ipaddress: 54.240.130.19 - - domain: cloudfront.net - ipaddress: 54.240.130.20 - - domain: cloudfront.net - ipaddress: 54.240.130.21 - - domain: cloudfront.net - ipaddress: 54.240.130.22 - - domain: cloudfront.net - ipaddress: 54.240.130.23 - - domain: cloudfront.net - ipaddress: 54.240.130.24 - - domain: cloudfront.net - ipaddress: 54.240.130.25 - - domain: cloudfront.net - ipaddress: 54.240.130.26 - - domain: cloudfront.net - ipaddress: 54.240.130.27 - - domain: cloudfront.net - ipaddress: 54.240.130.28 - - domain: cloudfront.net - ipaddress: 54.240.130.29 - - domain: cloudfront.net - ipaddress: 54.240.130.30 - - domain: cloudfront.net - ipaddress: 54.240.130.31 - - domain: cloudfront.net - ipaddress: 54.240.130.32 - - domain: cloudfront.net - ipaddress: 54.240.130.33 - - domain: cloudfront.net - ipaddress: 54.240.130.34 - - domain: cloudfront.net - ipaddress: 54.240.130.35 - - domain: cloudfront.net - ipaddress: 54.240.130.36 - - domain: cloudfront.net - ipaddress: 54.240.130.37 - - domain: cloudfront.net - ipaddress: 54.240.130.38 - - domain: cloudfront.net - ipaddress: 54.240.130.39 - - domain: cloudfront.net - ipaddress: 54.240.130.40 - - domain: cloudfront.net - ipaddress: 54.240.130.41 - - domain: cloudfront.net - ipaddress: 54.240.130.42 - - domain: cloudfront.net - ipaddress: 54.240.130.43 - - domain: cloudfront.net - ipaddress: 54.240.130.44 - - domain: cloudfront.net - ipaddress: 54.240.130.45 - - domain: cloudfront.net - ipaddress: 54.240.130.46 - - domain: cloudfront.net - ipaddress: 54.240.130.47 - - domain: cloudfront.net - ipaddress: 54.240.130.48 - - domain: cloudfront.net - ipaddress: 54.240.130.49 - - domain: cloudfront.net - ipaddress: 54.240.130.50 - - domain: cloudfront.net - ipaddress: 54.240.130.51 - - domain: cloudfront.net - ipaddress: 54.240.130.52 - - domain: cloudfront.net - ipaddress: 54.240.130.53 - - domain: cloudfront.net - ipaddress: 54.240.130.54 - - domain: cloudfront.net - ipaddress: 54.240.130.55 - - domain: cloudfront.net - ipaddress: 54.240.130.56 - - domain: cloudfront.net - ipaddress: 54.240.130.57 - - domain: cloudfront.net - ipaddress: 54.240.130.58 - - domain: cloudfront.net - ipaddress: 54.240.130.59 - - domain: cloudfront.net - ipaddress: 54.240.130.60 - - domain: cloudfront.net - ipaddress: 54.240.130.61 - - domain: cloudfront.net - ipaddress: 54.240.130.62 - - domain: cloudfront.net - ipaddress: 54.240.130.63 - - domain: cloudfront.net - ipaddress: 54.240.130.64 - - domain: cloudfront.net - ipaddress: 54.240.130.65 - - domain: cloudfront.net - ipaddress: 54.240.130.66 - - domain: cloudfront.net - ipaddress: 54.240.130.67 - - domain: cloudfront.net - ipaddress: 54.240.130.68 - - domain: cloudfront.net - ipaddress: 54.240.130.69 - - domain: cloudfront.net - ipaddress: 54.240.130.70 - - domain: cloudfront.net - ipaddress: 54.240.130.71 - - domain: cloudfront.net - ipaddress: 54.240.130.72 - - domain: cloudfront.net - ipaddress: 54.240.130.73 - - domain: cloudfront.net - ipaddress: 54.240.130.74 - - domain: cloudfront.net - ipaddress: 54.240.130.75 - - domain: cloudfront.net - ipaddress: 54.240.130.76 - - domain: cloudfront.net - ipaddress: 54.240.130.77 - - domain: cloudfront.net - ipaddress: 54.240.130.78 - - domain: cloudfront.net - ipaddress: 54.240.130.79 - - domain: cloudfront.net - ipaddress: 54.240.130.80 - - domain: cloudfront.net - ipaddress: 54.240.130.81 - - domain: cloudfront.net - ipaddress: 54.240.130.82 - - domain: cloudfront.net - ipaddress: 54.240.130.83 - - domain: cloudfront.net - ipaddress: 54.240.130.84 - - domain: cloudfront.net - ipaddress: 54.240.130.85 - - domain: cloudfront.net - ipaddress: 54.240.130.86 - - domain: cloudfront.net - ipaddress: 54.240.130.87 - - domain: cloudfront.net - ipaddress: 54.240.130.88 - - domain: cloudfront.net - ipaddress: 54.240.130.89 - - domain: cloudfront.net - ipaddress: 54.240.130.90 - - domain: cloudfront.net - ipaddress: 54.240.130.91 - - domain: cloudfront.net - ipaddress: 54.240.130.92 - - domain: cloudfront.net - ipaddress: 54.240.130.93 - - domain: cloudfront.net - ipaddress: 54.240.130.94 - - domain: cloudfront.net - ipaddress: 54.240.130.95 - - domain: cloudfront.net - ipaddress: 54.240.130.96 - - domain: cloudfront.net - ipaddress: 54.240.130.97 - - domain: cloudfront.net - ipaddress: 54.240.130.98 - - domain: cloudfront.net - ipaddress: 54.240.130.99 - - domain: cloudfront.net - ipaddress: 54.240.130.100 - - domain: cloudfront.net - ipaddress: 54.240.130.101 - - domain: cloudfront.net - ipaddress: 54.240.130.102 - - domain: cloudfront.net - ipaddress: 54.240.130.103 - - domain: cloudfront.net - ipaddress: 54.240.130.104 - - domain: cloudfront.net - ipaddress: 54.240.130.105 - - domain: cloudfront.net - ipaddress: 54.240.130.106 - - domain: cloudfront.net - ipaddress: 54.240.130.107 - - domain: cloudfront.net - ipaddress: 54.240.130.108 - - domain: cloudfront.net - ipaddress: 54.240.130.109 - - domain: cloudfront.net - ipaddress: 54.240.130.110 - - domain: cloudfront.net - ipaddress: 54.240.130.111 - - domain: cloudfront.net - ipaddress: 54.240.130.112 - - domain: cloudfront.net - ipaddress: 54.240.130.113 - - domain: cloudfront.net - ipaddress: 54.240.130.114 - - domain: cloudfront.net - ipaddress: 54.240.130.115 - - domain: cloudfront.net - ipaddress: 54.240.130.116 - - domain: cloudfront.net - ipaddress: 54.240.130.117 - - domain: cloudfront.net - ipaddress: 54.240.130.118 - - domain: cloudfront.net - ipaddress: 54.240.130.119 - - domain: cloudfront.net - ipaddress: 54.240.130.120 - - domain: cloudfront.net - ipaddress: 54.240.130.121 - - domain: cloudfront.net - ipaddress: 54.240.130.122 - - domain: cloudfront.net - ipaddress: 54.240.130.123 - - domain: cloudfront.net - ipaddress: 54.240.130.125 - - domain: cloudfront.net - ipaddress: 54.240.130.124 - - domain: cloudfront.net - ipaddress: 54.240.130.126 - - domain: cloudfront.net - ipaddress: 54.240.130.127 - - domain: cloudfront.net - ipaddress: 54.240.130.128 - - domain: cloudfront.net - ipaddress: 54.240.130.129 - - domain: cloudfront.net - ipaddress: 54.240.130.130 - - domain: cloudfront.net - ipaddress: 54.240.130.132 - - domain: cloudfront.net - ipaddress: 54.240.130.133 - - domain: cloudfront.net - ipaddress: 54.240.130.135 - - domain: cloudfront.net - ipaddress: 54.240.130.136 - - domain: cloudfront.net - ipaddress: 54.240.130.137 - - domain: cloudfront.net - ipaddress: 54.240.130.138 - - domain: cloudfront.net - ipaddress: 54.240.130.139 - - domain: cloudfront.net - ipaddress: 54.240.130.140 - - domain: cloudfront.net - ipaddress: 54.240.130.141 - - domain: cloudfront.net - ipaddress: 54.240.130.142 - - domain: cloudfront.net - ipaddress: 54.240.130.143 - - domain: cloudfront.net - ipaddress: 54.240.130.144 - - domain: cloudfront.net - ipaddress: 54.240.130.145 - - domain: cloudfront.net - ipaddress: 54.240.130.146 - - domain: cloudfront.net - ipaddress: 54.240.130.147 - - domain: cloudfront.net - ipaddress: 54.240.130.148 - - domain: cloudfront.net - ipaddress: 54.240.130.149 - - domain: cloudfront.net - ipaddress: 54.240.130.150 - - domain: cloudfront.net - ipaddress: 54.240.130.151 - - domain: cloudfront.net - ipaddress: 54.240.130.152 - - domain: cloudfront.net - ipaddress: 54.240.130.153 - - domain: cloudfront.net - ipaddress: 54.240.130.154 - - domain: cloudfront.net - ipaddress: 54.240.130.155 - - domain: cloudfront.net - ipaddress: 54.240.130.156 - - domain: cloudfront.net - ipaddress: 54.240.130.157 - - domain: cloudfront.net - ipaddress: 54.240.130.158 - - domain: cloudfront.net - ipaddress: 54.240.130.159 - - domain: cloudfront.net - ipaddress: 54.240.130.160 - - domain: cloudfront.net - ipaddress: 54.240.130.161 - - domain: cloudfront.net - ipaddress: 54.240.130.162 - - domain: cloudfront.net - ipaddress: 54.240.130.163 - - domain: cloudfront.net - ipaddress: 54.240.130.164 - - domain: cloudfront.net - ipaddress: 54.240.130.165 - - domain: cloudfront.net - ipaddress: 54.240.130.166 - - domain: cloudfront.net - ipaddress: 54.240.130.167 - - domain: cloudfront.net - ipaddress: 54.240.130.168 - - domain: cloudfront.net - ipaddress: 54.240.130.169 - - domain: cloudfront.net - ipaddress: 54.240.130.170 - - domain: cloudfront.net - ipaddress: 54.240.130.171 - - domain: cloudfront.net - ipaddress: 54.240.130.172 - - domain: cloudfront.net - ipaddress: 54.240.130.173 - - domain: cloudfront.net - ipaddress: 54.240.130.174 - - domain: cloudfront.net - ipaddress: 54.240.130.175 - - domain: cloudfront.net - ipaddress: 54.240.130.176 - - domain: cloudfront.net - ipaddress: 54.240.130.177 - - domain: cloudfront.net - ipaddress: 54.240.130.178 - - domain: cloudfront.net - ipaddress: 54.240.130.179 - - domain: cloudfront.net - ipaddress: 54.240.130.180 - - domain: cloudfront.net - ipaddress: 54.240.130.181 - - domain: cloudfront.net - ipaddress: 54.240.130.182 - - domain: cloudfront.net - ipaddress: 54.240.130.183 - - domain: cloudfront.net - ipaddress: 54.240.130.184 - - domain: cloudfront.net - ipaddress: 54.240.130.185 - - domain: cloudfront.net - ipaddress: 54.240.130.186 - - domain: cloudfront.net - ipaddress: 54.240.130.187 - - domain: cloudfront.net - ipaddress: 54.240.130.188 - - domain: cloudfront.net - ipaddress: 54.240.130.189 - - domain: cloudfront.net - ipaddress: 54.240.130.190 - - domain: cloudfront.net - ipaddress: 54.240.130.191 - - domain: cloudfront.net - ipaddress: 54.240.130.192 - - domain: cloudfront.net - ipaddress: 54.240.130.193 - - domain: cloudfront.net - ipaddress: 54.240.130.194 - - domain: cloudfront.net - ipaddress: 54.240.130.195 - - domain: cloudfront.net - ipaddress: 54.240.130.196 - - domain: cloudfront.net - ipaddress: 54.240.130.197 - - domain: cloudfront.net - ipaddress: 54.240.130.198 - - domain: cloudfront.net - ipaddress: 54.240.130.199 - - domain: cloudfront.net - ipaddress: 54.240.130.200 - - domain: cloudfront.net - ipaddress: 54.240.130.201 - - domain: cloudfront.net - ipaddress: 54.240.130.202 - - domain: cloudfront.net - ipaddress: 54.240.130.203 - - domain: cloudfront.net - ipaddress: 54.240.130.204 - - domain: cloudfront.net - ipaddress: 54.240.130.205 - - domain: cloudfront.net - ipaddress: 54.240.130.206 - - domain: cloudfront.net - ipaddress: 54.240.130.207 - - domain: cloudfront.net - ipaddress: 54.240.130.208 - - domain: cloudfront.net - ipaddress: 54.240.130.209 - - domain: cloudfront.net - ipaddress: 54.240.130.210 - - domain: cloudfront.net - ipaddress: 54.240.130.211 - - domain: cloudfront.net - ipaddress: 54.240.130.212 - - domain: cloudfront.net - ipaddress: 54.240.130.213 - - domain: cloudfront.net - ipaddress: 54.240.130.214 - - domain: cloudfront.net - ipaddress: 54.240.130.215 - - domain: cloudfront.net - ipaddress: 54.240.130.216 - - domain: cloudfront.net - ipaddress: 54.240.130.217 - - domain: cloudfront.net - ipaddress: 54.240.130.218 - - domain: cloudfront.net - ipaddress: 54.240.130.219 - - domain: cloudfront.net - ipaddress: 54.240.130.220 - - domain: cloudfront.net - ipaddress: 54.240.130.221 - - domain: cloudfront.net - ipaddress: 54.240.130.222 - - domain: cloudfront.net - ipaddress: 54.240.130.223 - - domain: cloudfront.net - ipaddress: 54.240.130.224 - - domain: cloudfront.net - ipaddress: 54.240.130.225 - - domain: cloudfront.net - ipaddress: 54.240.130.226 - - domain: cloudfront.net - ipaddress: 54.240.130.227 - - domain: cloudfront.net - ipaddress: 54.240.130.228 - - domain: cloudfront.net - ipaddress: 54.240.130.229 - - domain: cloudfront.net - ipaddress: 54.240.130.230 - - domain: cloudfront.net - ipaddress: 54.240.130.231 - - domain: cloudfront.net - ipaddress: 54.240.130.232 - - domain: cloudfront.net - ipaddress: 54.240.130.233 - - domain: cloudfront.net - ipaddress: 54.240.130.234 - - domain: cloudfront.net - ipaddress: 54.240.130.235 - - domain: cloudfront.net - ipaddress: 54.240.130.236 - - domain: cloudfront.net - ipaddress: 54.240.130.237 - - domain: cloudfront.net - ipaddress: 54.240.130.238 - - domain: cloudfront.net - ipaddress: 54.240.130.239 - - domain: cloudfront.net - ipaddress: 54.240.130.240 - - domain: cloudfront.net - ipaddress: 54.240.130.241 - - domain: cloudfront.net - ipaddress: 54.240.130.242 - - domain: cloudfront.net - ipaddress: 54.240.130.243 - - domain: cloudfront.net - ipaddress: 54.240.130.244 - - domain: cloudfront.net - ipaddress: 54.240.130.245 - - domain: cloudfront.net - ipaddress: 54.240.130.246 - - domain: cloudfront.net - ipaddress: 54.240.130.247 - - domain: cloudfront.net - ipaddress: 54.192.3.4 - - domain: cloudfront.net - ipaddress: 54.240.130.248 - - domain: cloudfront.net - ipaddress: 54.240.130.249 - - domain: cloudfront.net - ipaddress: 54.192.3.5 - - domain: cloudfront.net - ipaddress: 54.192.3.6 - - domain: cloudfront.net - ipaddress: 54.192.3.7 - - domain: cloudfront.net - ipaddress: 54.192.3.8 - - domain: cloudfront.net - ipaddress: 54.240.130.250 - - domain: cloudfront.net - ipaddress: 54.192.3.9 - - domain: cloudfront.net - ipaddress: 54.240.130.251 - - domain: cloudfront.net - ipaddress: 54.192.3.10 - - domain: cloudfront.net - ipaddress: 54.240.130.252 - - domain: cloudfront.net - ipaddress: 54.192.3.11 - - domain: cloudfront.net - ipaddress: 54.240.130.253 - - domain: cloudfront.net - ipaddress: 54.192.3.12 - - domain: cloudfront.net - ipaddress: 54.240.130.254 - - domain: cloudfront.net - ipaddress: 54.192.3.13 - - domain: cloudfront.net - ipaddress: 54.192.3.14 - - domain: cloudfront.net - ipaddress: 54.192.3.15 - - domain: cloudfront.net - ipaddress: 54.192.3.16 - - domain: cloudfront.net - ipaddress: 54.192.3.17 - - domain: cloudfront.net - ipaddress: 54.192.3.18 - - domain: cloudfront.net - ipaddress: 54.240.131.2 - - domain: cloudfront.net - ipaddress: 54.240.131.3 - - domain: cloudfront.net - ipaddress: 54.192.3.19 - - domain: cloudfront.net - ipaddress: 54.240.131.4 - - domain: cloudfront.net - ipaddress: 54.240.131.5 - - domain: cloudfront.net - ipaddress: 54.192.3.20 - - domain: cloudfront.net - ipaddress: 54.240.131.6 - - domain: cloudfront.net - ipaddress: 54.192.3.21 - - domain: cloudfront.net - ipaddress: 54.240.131.7 - - domain: cloudfront.net - ipaddress: 54.192.3.23 - - domain: cloudfront.net - ipaddress: 54.240.131.8 - - domain: cloudfront.net - ipaddress: 54.240.131.9 - - domain: cloudfront.net - ipaddress: 54.192.3.25 - - domain: cloudfront.net - ipaddress: 54.240.131.10 - - domain: cloudfront.net - ipaddress: 54.192.3.26 - - domain: cloudfront.net - ipaddress: 54.240.131.11 - - domain: cloudfront.net - ipaddress: 54.240.131.12 - - domain: cloudfront.net - ipaddress: 54.192.3.27 - - domain: cloudfront.net - ipaddress: 54.192.3.28 - - domain: cloudfront.net - ipaddress: 54.240.131.13 - - domain: cloudfront.net - ipaddress: 54.192.3.29 - - domain: cloudfront.net - ipaddress: 54.192.3.22 - - domain: cloudfront.net - ipaddress: 54.192.3.30 - - domain: cloudfront.net - ipaddress: 54.192.3.31 - - domain: cloudfront.net - ipaddress: 54.240.131.14 - - domain: cloudfront.net - ipaddress: 54.240.131.15 - - domain: cloudfront.net - ipaddress: 54.240.131.16 - - domain: cloudfront.net - ipaddress: 54.192.3.34 - - domain: cloudfront.net - ipaddress: 54.192.3.35 - - domain: cloudfront.net - ipaddress: 54.240.131.17 - - domain: cloudfront.net - ipaddress: 54.192.3.36 - - domain: cloudfront.net - ipaddress: 54.240.131.18 - - domain: cloudfront.net - ipaddress: 54.240.131.19 - - domain: cloudfront.net - ipaddress: 54.240.131.20 - - domain: cloudfront.net - ipaddress: 54.192.3.37 - - domain: cloudfront.net - ipaddress: 54.192.3.38 - - domain: cloudfront.net - ipaddress: 54.240.131.21 - - domain: cloudfront.net - ipaddress: 54.240.131.22 - - domain: cloudfront.net - ipaddress: 54.192.3.39 - - domain: cloudfront.net - ipaddress: 54.240.131.23 - - domain: cloudfront.net - ipaddress: 54.240.131.24 - - domain: cloudfront.net - ipaddress: 54.192.3.40 - - domain: cloudfront.net - ipaddress: 54.192.3.41 - - domain: cloudfront.net - ipaddress: 54.240.131.25 - - domain: cloudfront.net - ipaddress: 54.240.131.26 - - domain: cloudfront.net - ipaddress: 54.240.131.27 - - domain: cloudfront.net - ipaddress: 54.192.3.43 - - domain: cloudfront.net - ipaddress: 54.192.3.44 - - domain: cloudfront.net - ipaddress: 54.192.3.45 - - domain: cloudfront.net - ipaddress: 54.240.131.28 - - domain: cloudfront.net - ipaddress: 54.240.131.29 - - domain: cloudfront.net - ipaddress: 54.192.3.46 - - domain: cloudfront.net - ipaddress: 54.192.3.47 - - domain: cloudfront.net - ipaddress: 54.240.131.30 - - domain: cloudfront.net - ipaddress: 54.240.131.31 - - domain: cloudfront.net - ipaddress: 54.240.131.32 - - domain: cloudfront.net - ipaddress: 54.240.131.33 - - domain: cloudfront.net - ipaddress: 54.192.3.49 - - domain: cloudfront.net - ipaddress: 54.240.131.34 - - domain: cloudfront.net - ipaddress: 54.192.3.50 - - domain: cloudfront.net - ipaddress: 54.192.3.51 - - domain: cloudfront.net - ipaddress: 54.240.131.35 - - domain: cloudfront.net - ipaddress: 54.192.3.52 - - domain: cloudfront.net - ipaddress: 54.240.131.36 - - domain: cloudfront.net - ipaddress: 54.192.3.53 - - domain: cloudfront.net - ipaddress: 54.240.131.37 - - domain: cloudfront.net - ipaddress: 54.192.3.54 - - domain: cloudfront.net - ipaddress: 54.240.131.38 - - domain: cloudfront.net - ipaddress: 54.240.131.39 - - domain: cloudfront.net - ipaddress: 54.192.3.56 - - domain: cloudfront.net - ipaddress: 54.192.3.57 - - domain: cloudfront.net - ipaddress: 54.240.131.40 - - domain: cloudfront.net - ipaddress: 54.240.131.41 - - domain: cloudfront.net - ipaddress: 54.192.3.58 - - domain: cloudfront.net - ipaddress: 54.240.131.42 - - domain: cloudfront.net - ipaddress: 54.192.3.59 - - domain: cloudfront.net - ipaddress: 54.240.131.43 - - domain: cloudfront.net - ipaddress: 54.192.3.60 - - domain: cloudfront.net - ipaddress: 54.192.3.61 - - domain: cloudfront.net - ipaddress: 54.240.131.44 - - domain: cloudfront.net - ipaddress: 54.192.3.62 - - domain: cloudfront.net - ipaddress: 54.240.131.45 - - domain: cloudfront.net - ipaddress: 54.192.3.63 - - domain: cloudfront.net - ipaddress: 54.192.3.64 - - domain: cloudfront.net - ipaddress: 54.240.131.46 - - domain: cloudfront.net - ipaddress: 54.192.3.65 - - domain: cloudfront.net - ipaddress: 54.240.131.47 - - domain: cloudfront.net - ipaddress: 54.240.131.48 - - domain: cloudfront.net - ipaddress: 54.192.3.66 - - domain: cloudfront.net - ipaddress: 54.240.131.49 - - domain: cloudfront.net - ipaddress: 54.192.3.67 - - domain: cloudfront.net - ipaddress: 54.192.3.68 - - domain: cloudfront.net - ipaddress: 54.240.131.50 - - domain: cloudfront.net - ipaddress: 54.240.131.51 - - domain: cloudfront.net - ipaddress: 54.192.3.69 - - domain: cloudfront.net - ipaddress: 54.240.131.52 - - domain: cloudfront.net - ipaddress: 54.192.3.70 - - domain: cloudfront.net - ipaddress: 54.240.131.53 - - domain: cloudfront.net - ipaddress: 54.240.131.54 - - domain: cloudfront.net - ipaddress: 54.192.3.71 - - domain: cloudfront.net - ipaddress: 54.192.3.72 - - domain: cloudfront.net - ipaddress: 54.192.3.73 - - domain: cloudfront.net - ipaddress: 54.240.131.56 - - domain: cloudfront.net - ipaddress: 54.192.3.74 - - domain: cloudfront.net - ipaddress: 54.240.131.55 - - domain: cloudfront.net - ipaddress: 54.192.3.75 - - domain: cloudfront.net - ipaddress: 54.240.131.57 - - domain: cloudfront.net - ipaddress: 54.192.3.76 - - domain: cloudfront.net - ipaddress: 54.192.3.77 - - domain: cloudfront.net - ipaddress: 54.240.131.58 - - domain: cloudfront.net - ipaddress: 54.192.3.78 - - domain: cloudfront.net - ipaddress: 54.240.131.59 - - domain: cloudfront.net - ipaddress: 54.240.131.60 - - domain: cloudfront.net - ipaddress: 54.192.3.80 - - domain: cloudfront.net - ipaddress: 54.240.131.61 - - domain: cloudfront.net - ipaddress: 54.192.3.79 - - domain: cloudfront.net - ipaddress: 54.192.3.81 - - domain: cloudfront.net - ipaddress: 54.240.131.62 - - domain: cloudfront.net - ipaddress: 54.240.131.63 - - domain: cloudfront.net - ipaddress: 54.192.3.82 - - domain: cloudfront.net - ipaddress: 54.192.3.83 - - domain: cloudfront.net - ipaddress: 54.240.131.64 - - domain: cloudfront.net - ipaddress: 54.240.131.65 - - domain: cloudfront.net - ipaddress: 54.192.3.84 - - domain: cloudfront.net - ipaddress: 54.240.131.66 - - domain: cloudfront.net - ipaddress: 54.192.3.85 - - domain: cloudfront.net - ipaddress: 54.192.3.86 - - domain: cloudfront.net - ipaddress: 54.240.131.67 - - domain: cloudfront.net - ipaddress: 54.192.3.87 - - domain: cloudfront.net - ipaddress: 54.240.131.68 - - domain: cloudfront.net - ipaddress: 54.240.131.70 - - domain: cloudfront.net - ipaddress: 54.240.131.69 - - domain: cloudfront.net - ipaddress: 54.240.131.71 - - domain: cloudfront.net - ipaddress: 54.240.131.72 - - domain: cloudfront.net - ipaddress: 54.192.3.88 - - domain: cloudfront.net - ipaddress: 54.192.3.89 - - domain: cloudfront.net - ipaddress: 54.240.131.73 - - domain: cloudfront.net - ipaddress: 54.192.3.90 - - domain: cloudfront.net - ipaddress: 54.240.131.74 - - domain: cloudfront.net - ipaddress: 54.192.3.91 - - domain: cloudfront.net - ipaddress: 54.192.3.92 - - domain: cloudfront.net - ipaddress: 54.240.131.75 - - domain: cloudfront.net - ipaddress: 54.240.131.76 - - domain: cloudfront.net - ipaddress: 54.192.3.93 - - domain: cloudfront.net - ipaddress: 54.192.3.94 - - domain: cloudfront.net - ipaddress: 54.240.131.77 - - domain: cloudfront.net - ipaddress: 54.192.3.95 - - domain: cloudfront.net - ipaddress: 54.240.131.78 - - domain: cloudfront.net - ipaddress: 54.192.3.97 - - domain: cloudfront.net - ipaddress: 54.240.131.79 - - domain: cloudfront.net - ipaddress: 54.240.131.80 - - domain: cloudfront.net - ipaddress: 54.240.131.81 - - domain: cloudfront.net - ipaddress: 54.192.3.98 - - domain: cloudfront.net - ipaddress: 54.192.3.99 - - domain: cloudfront.net - ipaddress: 54.240.131.82 - - domain: cloudfront.net - ipaddress: 54.192.3.100 - - domain: cloudfront.net - ipaddress: 54.240.131.83 - - domain: cloudfront.net - ipaddress: 54.192.3.101 - - domain: cloudfront.net - ipaddress: 54.240.131.84 - - domain: cloudfront.net - ipaddress: 54.192.3.102 - - domain: cloudfront.net - ipaddress: 54.240.131.85 - - domain: cloudfront.net - ipaddress: 54.192.3.103 - - domain: cloudfront.net - ipaddress: 54.240.131.86 - - domain: cloudfront.net - ipaddress: 54.240.131.87 - - domain: cloudfront.net - ipaddress: 54.192.3.104 - - domain: cloudfront.net - ipaddress: 54.240.131.88 - - domain: cloudfront.net - ipaddress: 54.192.3.105 - - domain: cloudfront.net - ipaddress: 54.192.3.106 - - domain: cloudfront.net - ipaddress: 54.240.131.89 - - domain: cloudfront.net - ipaddress: 54.192.3.107 - - domain: cloudfront.net - ipaddress: 54.240.131.90 - - domain: cloudfront.net - ipaddress: 54.192.3.108 - - domain: cloudfront.net - ipaddress: 54.240.131.91 - - domain: cloudfront.net - ipaddress: 54.240.131.92 - - domain: cloudfront.net - ipaddress: 54.240.131.93 - - domain: cloudfront.net - ipaddress: 54.192.3.110 - - domain: cloudfront.net - ipaddress: 54.240.131.94 - - domain: cloudfront.net - ipaddress: 54.192.3.111 - - domain: cloudfront.net - ipaddress: 54.240.131.95 - - domain: cloudfront.net - ipaddress: 54.240.131.96 - - domain: cloudfront.net - ipaddress: 54.192.3.112 - - domain: cloudfront.net - ipaddress: 54.240.131.97 - - domain: cloudfront.net - ipaddress: 54.192.3.113 - - domain: cloudfront.net - ipaddress: 54.240.131.98 - - domain: cloudfront.net - ipaddress: 54.192.3.114 - - domain: cloudfront.net - ipaddress: 54.240.131.99 - - domain: cloudfront.net - ipaddress: 54.240.131.100 - - domain: cloudfront.net - ipaddress: 54.192.3.116 - - domain: cloudfront.net - ipaddress: 54.240.131.101 - - domain: cloudfront.net - ipaddress: 54.192.3.117 - - domain: cloudfront.net - ipaddress: 54.240.131.102 - - domain: cloudfront.net - ipaddress: 54.240.131.103 - - domain: cloudfront.net - ipaddress: 54.192.3.119 - - domain: cloudfront.net - ipaddress: 54.240.131.104 - - domain: cloudfront.net - ipaddress: 54.240.131.105 - - domain: cloudfront.net - ipaddress: 54.192.3.121 - - domain: cloudfront.net - ipaddress: 54.192.3.123 - - domain: cloudfront.net - ipaddress: 54.240.131.106 - - domain: cloudfront.net - ipaddress: 54.240.131.107 - - domain: cloudfront.net - ipaddress: 54.240.131.108 - - domain: cloudfront.net - ipaddress: 54.192.3.126 - - domain: cloudfront.net - ipaddress: 54.240.131.109 - - domain: cloudfront.net - ipaddress: 54.192.3.127 - - domain: cloudfront.net - ipaddress: 54.240.131.110 - - domain: cloudfront.net - ipaddress: 54.192.3.128 - - domain: cloudfront.net - ipaddress: 54.240.131.111 - - domain: cloudfront.net - ipaddress: 54.192.3.129 - - domain: cloudfront.net - ipaddress: 54.240.131.112 - - domain: cloudfront.net - ipaddress: 54.192.3.130 - - domain: cloudfront.net - ipaddress: 54.240.131.113 - - domain: cloudfront.net - ipaddress: 54.192.3.131 - - domain: cloudfront.net - ipaddress: 54.240.131.114 - - domain: cloudfront.net - ipaddress: 54.192.3.132 - - domain: cloudfront.net - ipaddress: 54.192.3.133 - - domain: cloudfront.net - ipaddress: 54.240.131.115 - - domain: cloudfront.net - ipaddress: 54.240.131.116 - - domain: cloudfront.net - ipaddress: 54.240.131.117 - - domain: cloudfront.net - ipaddress: 54.192.3.135 - - domain: cloudfront.net - ipaddress: 54.240.131.118 - - domain: cloudfront.net - ipaddress: 54.192.3.136 - - domain: cloudfront.net - ipaddress: 54.240.131.119 - - domain: cloudfront.net - ipaddress: 54.192.3.137 - - domain: cloudfront.net - ipaddress: 54.240.131.120 - - domain: cloudfront.net - ipaddress: 54.192.3.138 - - domain: cloudfront.net - ipaddress: 54.240.131.121 - - domain: cloudfront.net - ipaddress: 54.192.3.139 - - domain: cloudfront.net - ipaddress: 54.240.131.122 - - domain: cloudfront.net - ipaddress: 54.240.131.123 - - domain: cloudfront.net - ipaddress: 54.192.3.140 - - domain: cloudfront.net - ipaddress: 54.192.3.141 - - domain: cloudfront.net - ipaddress: 54.240.131.124 - - domain: cloudfront.net - ipaddress: 54.192.3.142 - - domain: cloudfront.net - ipaddress: 54.240.131.125 - - domain: cloudfront.net - ipaddress: 54.192.3.143 - - domain: cloudfront.net - ipaddress: 54.240.131.126 - - domain: cloudfront.net - ipaddress: 54.192.3.144 - - domain: cloudfront.net - ipaddress: 54.240.131.127 - - domain: cloudfront.net - ipaddress: 54.192.3.145 - - domain: cloudfront.net - ipaddress: 54.192.3.146 - - domain: cloudfront.net - ipaddress: 54.240.131.129 - - domain: cloudfront.net - ipaddress: 54.240.131.128 - - domain: cloudfront.net - ipaddress: 54.240.131.130 - - domain: cloudfront.net - ipaddress: 54.192.3.148 - - domain: cloudfront.net - ipaddress: 54.240.131.132 - - domain: cloudfront.net - ipaddress: 54.192.3.149 - - domain: cloudfront.net - ipaddress: 54.240.131.133 - - domain: cloudfront.net - ipaddress: 54.192.3.150 - - domain: cloudfront.net - ipaddress: 54.240.131.134 - - domain: cloudfront.net - ipaddress: 54.192.3.151 - - domain: cloudfront.net - ipaddress: 54.240.131.135 - - domain: cloudfront.net - ipaddress: 54.192.3.152 - - domain: cloudfront.net - ipaddress: 54.240.131.136 - - domain: cloudfront.net - ipaddress: 54.192.3.153 - - domain: cloudfront.net - ipaddress: 54.192.3.154 - - domain: cloudfront.net - ipaddress: 54.192.3.155 - - domain: cloudfront.net - ipaddress: 54.240.131.137 - - domain: cloudfront.net - ipaddress: 54.240.131.138 - - domain: cloudfront.net - ipaddress: 54.240.131.139 - - domain: cloudfront.net - ipaddress: 54.192.3.156 - - domain: cloudfront.net - ipaddress: 54.192.3.157 - - domain: cloudfront.net - ipaddress: 54.240.131.140 - - domain: cloudfront.net - ipaddress: 54.240.131.141 - - domain: cloudfront.net - ipaddress: 54.240.131.142 - - domain: cloudfront.net - ipaddress: 54.192.3.158 - - domain: cloudfront.net - ipaddress: 54.240.131.143 - - domain: cloudfront.net - ipaddress: 54.240.131.144 - - domain: cloudfront.net - ipaddress: 54.192.3.160 - - domain: cloudfront.net - ipaddress: 54.192.3.161 - - domain: cloudfront.net - ipaddress: 54.240.131.145 - - domain: cloudfront.net - ipaddress: 54.240.131.146 - - domain: cloudfront.net - ipaddress: 54.240.131.147 - - domain: cloudfront.net - ipaddress: 54.240.131.148 - - domain: cloudfront.net - ipaddress: 54.240.131.149 - - domain: cloudfront.net - ipaddress: 54.192.3.165 - - domain: cloudfront.net - ipaddress: 54.240.131.150 - - domain: cloudfront.net - ipaddress: 54.192.3.166 - - domain: cloudfront.net - ipaddress: 54.240.131.151 - - domain: cloudfront.net - ipaddress: 54.240.131.152 - - domain: cloudfront.net - ipaddress: 54.192.3.167 - - domain: cloudfront.net - ipaddress: 54.240.131.153 - - domain: cloudfront.net - ipaddress: 54.192.3.168 - - domain: cloudfront.net - ipaddress: 54.192.3.169 - - domain: cloudfront.net - ipaddress: 54.240.131.155 - - domain: cloudfront.net - ipaddress: 54.240.131.154 - - domain: cloudfront.net - ipaddress: 54.192.3.170 - - domain: cloudfront.net - ipaddress: 54.240.131.156 - - domain: cloudfront.net - ipaddress: 54.192.3.171 - - domain: cloudfront.net - ipaddress: 54.240.131.157 - - domain: cloudfront.net - ipaddress: 54.192.3.172 - - domain: cloudfront.net - ipaddress: 54.240.131.158 - - domain: cloudfront.net - ipaddress: 54.192.3.173 - - domain: cloudfront.net - ipaddress: 54.240.131.159 - - domain: cloudfront.net - ipaddress: 54.240.131.160 - - domain: cloudfront.net - ipaddress: 54.192.3.174 - - domain: cloudfront.net - ipaddress: 54.240.131.161 - - domain: cloudfront.net - ipaddress: 54.192.3.175 - - domain: cloudfront.net - ipaddress: 54.192.3.176 - - domain: cloudfront.net - ipaddress: 54.240.131.162 - - domain: cloudfront.net - ipaddress: 54.240.131.163 - - domain: cloudfront.net - ipaddress: 54.192.3.177 - - domain: cloudfront.net - ipaddress: 54.192.3.178 - - domain: cloudfront.net - ipaddress: 54.240.131.164 - - domain: cloudfront.net - ipaddress: 54.192.3.179 - - domain: cloudfront.net - ipaddress: 54.240.131.165 - - domain: cloudfront.net - ipaddress: 54.240.131.166 - - domain: cloudfront.net - ipaddress: 54.192.3.180 - - domain: cloudfront.net - ipaddress: 54.192.3.181 - - domain: cloudfront.net - ipaddress: 54.240.131.167 - - domain: cloudfront.net - ipaddress: 54.240.131.168 - - domain: cloudfront.net - ipaddress: 54.192.3.182 - - domain: cloudfront.net - ipaddress: 54.240.131.169 - - domain: cloudfront.net - ipaddress: 54.192.3.183 - - domain: cloudfront.net - ipaddress: 54.192.3.184 - - domain: cloudfront.net - ipaddress: 54.240.131.170 - - domain: cloudfront.net - ipaddress: 54.240.131.171 - - domain: cloudfront.net - ipaddress: 54.192.3.185 - - domain: cloudfront.net - ipaddress: 54.240.131.172 - - domain: cloudfront.net - ipaddress: 54.192.3.186 - - domain: cloudfront.net - ipaddress: 54.192.3.187 - - domain: cloudfront.net - ipaddress: 54.192.3.188 - - domain: cloudfront.net - ipaddress: 54.240.131.173 - - domain: cloudfront.net - ipaddress: 54.192.3.189 - - domain: cloudfront.net - ipaddress: 54.240.131.174 - - domain: cloudfront.net - ipaddress: 54.192.3.190 - - domain: cloudfront.net - ipaddress: 54.240.131.175 - - domain: cloudfront.net - ipaddress: 54.240.131.176 - - domain: cloudfront.net - ipaddress: 54.192.3.191 - - domain: cloudfront.net - ipaddress: 54.192.3.192 - - domain: cloudfront.net - ipaddress: 54.240.131.177 - - domain: cloudfront.net - ipaddress: 54.192.3.193 - - domain: cloudfront.net - ipaddress: 54.240.131.178 - - domain: cloudfront.net - ipaddress: 54.192.3.194 - - domain: cloudfront.net - ipaddress: 54.240.131.179 - - domain: cloudfront.net - ipaddress: 54.240.131.180 - - domain: cloudfront.net - ipaddress: 54.192.3.195 - - domain: cloudfront.net - ipaddress: 54.192.3.196 - - domain: cloudfront.net - ipaddress: 54.240.131.181 - - domain: cloudfront.net - ipaddress: 54.192.3.197 - - domain: cloudfront.net - ipaddress: 54.240.131.182 - - domain: cloudfront.net - ipaddress: 54.192.3.198 - - domain: cloudfront.net - ipaddress: 54.240.131.183 - - domain: cloudfront.net - ipaddress: 54.240.131.184 - - domain: cloudfront.net - ipaddress: 54.192.3.199 - - domain: cloudfront.net - ipaddress: 54.240.131.185 - - domain: cloudfront.net - ipaddress: 54.192.3.200 - - domain: cloudfront.net - ipaddress: 54.240.131.186 - - domain: cloudfront.net - ipaddress: 54.192.3.202 - - domain: cloudfront.net - ipaddress: 54.240.131.187 - - domain: cloudfront.net - ipaddress: 54.240.131.188 - - domain: cloudfront.net - ipaddress: 54.240.131.189 - - domain: cloudfront.net - ipaddress: 54.192.3.203 - - domain: cloudfront.net - ipaddress: 54.192.3.204 - - domain: cloudfront.net - ipaddress: 54.192.3.205 - - domain: cloudfront.net - ipaddress: 54.240.131.190 - - domain: cloudfront.net - ipaddress: 54.240.131.191 - - domain: cloudfront.net - ipaddress: 54.240.131.192 - - domain: cloudfront.net - ipaddress: 54.192.3.206 - - domain: cloudfront.net - ipaddress: 54.192.3.207 - - domain: cloudfront.net - ipaddress: 54.240.131.193 - - domain: cloudfront.net - ipaddress: 54.192.3.208 - - domain: cloudfront.net - ipaddress: 54.240.131.194 - - domain: cloudfront.net - ipaddress: 54.192.3.209 - - domain: cloudfront.net - ipaddress: 54.240.131.195 - - domain: cloudfront.net - ipaddress: 54.192.3.210 - - domain: cloudfront.net - ipaddress: 54.192.3.211 - - domain: cloudfront.net - ipaddress: 54.240.131.196 - - domain: cloudfront.net - ipaddress: 54.240.131.197 - - domain: cloudfront.net - ipaddress: 54.192.3.212 - - domain: cloudfront.net - ipaddress: 54.240.131.198 - - domain: cloudfront.net - ipaddress: 54.192.3.213 - - domain: cloudfront.net - ipaddress: 54.192.3.214 - - domain: cloudfront.net - ipaddress: 54.240.131.199 - - domain: cloudfront.net - ipaddress: 54.192.3.215 - - domain: cloudfront.net - ipaddress: 54.240.131.200 - - domain: cloudfront.net - ipaddress: 54.192.3.216 - - domain: cloudfront.net - ipaddress: 54.240.131.201 - - domain: cloudfront.net - ipaddress: 54.192.3.217 - - domain: cloudfront.net - ipaddress: 54.240.131.202 - - domain: cloudfront.net - ipaddress: 54.192.3.219 - - domain: cloudfront.net - ipaddress: 54.240.131.203 - - domain: cloudfront.net - ipaddress: 54.192.3.220 - - domain: cloudfront.net - ipaddress: 54.192.3.221 - - domain: cloudfront.net - ipaddress: 54.240.131.204 - - domain: cloudfront.net - ipaddress: 54.240.131.205 - - domain: cloudfront.net - ipaddress: 54.192.3.222 - - domain: cloudfront.net - ipaddress: 54.240.131.206 - - domain: cloudfront.net - ipaddress: 54.192.3.223 - - domain: cloudfront.net - ipaddress: 54.240.131.207 - - domain: cloudfront.net - ipaddress: 54.240.131.208 - - domain: cloudfront.net - ipaddress: 54.240.131.209 - - domain: cloudfront.net - ipaddress: 54.192.3.224 - - domain: cloudfront.net - ipaddress: 54.240.131.210 - - domain: cloudfront.net - ipaddress: 54.192.3.226 - - domain: cloudfront.net - ipaddress: 54.240.131.211 - - domain: cloudfront.net - ipaddress: 54.240.131.212 - - domain: cloudfront.net - ipaddress: 54.192.3.227 - - domain: cloudfront.net - ipaddress: 54.240.131.213 - - domain: cloudfront.net - ipaddress: 54.192.3.228 - - domain: cloudfront.net - ipaddress: 54.240.131.214 - - domain: cloudfront.net - ipaddress: 54.192.3.229 - - domain: cloudfront.net - ipaddress: 54.240.131.215 - - domain: cloudfront.net - ipaddress: 54.192.3.231 - - domain: cloudfront.net - ipaddress: 54.240.131.217 - - domain: cloudfront.net - ipaddress: 54.192.3.230 - - domain: cloudfront.net - ipaddress: 54.240.131.218 - - domain: cloudfront.net - ipaddress: 54.192.3.232 - - domain: cloudfront.net - ipaddress: 54.192.3.233 - - domain: cloudfront.net - ipaddress: 54.240.131.219 - - domain: cloudfront.net - ipaddress: 54.192.3.234 - - domain: cloudfront.net - ipaddress: 54.240.131.220 - - domain: cloudfront.net - ipaddress: 54.192.3.235 - - domain: cloudfront.net - ipaddress: 54.192.3.236 - - domain: cloudfront.net - ipaddress: 54.240.131.221 - - domain: cloudfront.net - ipaddress: 54.240.131.222 - - domain: cloudfront.net - ipaddress: 54.192.3.237 - - domain: cloudfront.net - ipaddress: 54.192.3.238 - - domain: cloudfront.net - ipaddress: 54.240.131.223 - - domain: cloudfront.net - ipaddress: 54.240.131.224 - - domain: cloudfront.net - ipaddress: 54.192.3.239 - - domain: cloudfront.net - ipaddress: 54.192.3.240 - - domain: cloudfront.net - ipaddress: 54.240.131.225 - - domain: cloudfront.net - ipaddress: 54.240.131.226 - - domain: cloudfront.net - ipaddress: 54.192.3.241 - - domain: cloudfront.net - ipaddress: 54.192.3.242 - - domain: cloudfront.net - ipaddress: 54.240.131.227 - - domain: cloudfront.net - ipaddress: 54.192.3.243 - - domain: cloudfront.net - ipaddress: 54.240.131.228 - - domain: cloudfront.net - ipaddress: 54.192.3.244 - - domain: cloudfront.net - ipaddress: 54.192.3.245 - - domain: cloudfront.net - ipaddress: 54.240.131.229 - - domain: cloudfront.net - ipaddress: 54.192.3.246 - - domain: cloudfront.net - ipaddress: 54.240.131.231 - - domain: cloudfront.net - ipaddress: 54.240.131.230 - - domain: cloudfront.net - ipaddress: 54.192.3.247 - - domain: cloudfront.net - ipaddress: 54.192.3.248 - - domain: cloudfront.net - ipaddress: 54.240.131.232 - - domain: cloudfront.net - ipaddress: 54.240.131.233 - - domain: cloudfront.net - ipaddress: 54.192.3.249 - - domain: cloudfront.net - ipaddress: 54.240.131.234 - - domain: cloudfront.net - ipaddress: 54.192.3.250 - - domain: cloudfront.net - ipaddress: 54.192.3.251 - - domain: cloudfront.net - ipaddress: 54.192.3.252 - - domain: cloudfront.net - ipaddress: 54.240.131.235 - - domain: cloudfront.net - ipaddress: 54.240.131.236 - - domain: cloudfront.net - ipaddress: 54.240.131.237 - - domain: cloudfront.net - ipaddress: 54.192.3.253 - - domain: cloudfront.net - ipaddress: 54.240.131.238 - - domain: cloudfront.net - ipaddress: 54.192.3.254 - - domain: cloudfront.net - ipaddress: 54.240.131.239 - - domain: cloudfront.net - ipaddress: 54.240.131.240 - - domain: cloudfront.net - ipaddress: 54.240.131.241 - - domain: cloudfront.net - ipaddress: 54.240.131.242 - - domain: cloudfront.net - ipaddress: 54.240.131.243 - - domain: cloudfront.net - ipaddress: 54.240.131.244 - - domain: cloudfront.net - ipaddress: 54.240.131.245 - - domain: cloudfront.net - ipaddress: 54.240.131.246 - - domain: cloudfront.net - ipaddress: 54.240.131.247 - - domain: cloudfront.net - ipaddress: 54.240.131.248 - - domain: cloudfront.net - ipaddress: 54.240.131.249 - - domain: cloudfront.net - ipaddress: 54.240.131.250 - - domain: custom-origin.cloudfront-test.net - ipaddress: 54.240.131.216 - - domain: custom-origin.cloudfront-test.net - ipaddress: 54.240.130.134 - - domain: custom-origin.cloudfront-test.net - ipaddress: 54.240.129.131 - - domain: d1vipartqpsj5t.cloudfront.net - ipaddress: 54.192.0.29 -proxiedsites: - delta: - additions: [] - deletions: [] - cloud: - - 0000a-fast-proxy.de - - 000dy.com - - 000proxy.info - - 00271.com - - 007sn.com - - 010ly.com - - 0111.com.au - - 0126wyt.com - - 020usa.com - - 033b.com - - 063g.com - - 0666.info - - 0668.cc - - 073.cc - - 0737weal.com - - 08099.com - - 09cao.com - - 0day.kiev.ua - - 0rz.tw - - 1-apple.com.tw - - 1000.tv - - 1000860006.com - - 1000giri.net - - 1000ideasdenegocios.com - - 1000kan.com - - 100p-douga.com - - 10240.com.ar - - 1024go.info - - 1030ok.com - - 10movs.com - - 10renti.com - - 10times.com - - 10xjw.com - - 10youtube.com - - 110se.com - - 111.com - - 111.com.cn - - 111111.com.tw - - 1111tp.com - - 111gx.com - - 116139.com - - 11688.net - - 11ffbb.com - - 11foxy.com - - 11hkhk.com - - 11pk.net - - 1234.com - - 12345proxy.co - - 12345proxy.info - - 12345proxy.net - - 12345proxy.org - - 123bomb.com - - 123rf.com - - 12bet.com - - 12secondcommute.com - - 12vpn.com - - 12vpn.net - - 13237.com - - 139gan.com - - 13deals.com - - 140dev.com - - 1414.de - - 141tube.com - - 147rr.com - - 155game.com - - 15cao.com - - 161sex.com - - 1688.com.au - - 16maple.com - - 173ng.com - - 177wyt.com - - 17t17p.com - - 17wtlbb.com - - 18-21-teens.com - - 18-schoolgirlz.com - - 18-sex.us - - 1800flowers.com - - 180wan.com - - 18avok.us - - 18dao.com - - 18jack.com - - 18onlygirls.com - - 18pussyclub.com - - 18virginsex.com - - 18xgroup.com - - 1984bbs.org - - 1bao.org - - 1c.ru - - 1dpw.com - - 1eew.com - - 1fichier.com - - 1huisuo.net - - 1kan.com - - 1proxy.de - - 1st-game.net - - 1stopcn.com - - 1stwebgame.com - - 2-hand.info - - 2-porn.com - - 2000bo.com - - 2000fun.com - - 2000mov.com - - 2008.ws - - 2008xianzhang.info - - 2012se.info - - 2012tt.com - - 2014nnn.com - - 20jack.com - - 20minutos.tv - - 20yotube.com - - 2112112.net - - 211zy.com - - 213yy.com - - 21sextury.com - - 21wife.com - - 222mimi.net - - 22nf.info - - 22tracks.com - - 234mr.com - - 235job.com - - 23dy.info - - 23video.com - - 247workinghost.com - - 248cc.com - - 249ss.com - - 24hourprint.com - - 24open.ru - - 24proxy.com - - 24smile.org - - 24topproxy.com - - 24traffic.info - - 24tunnel.com - - 27144.com - - 27hhh.com - - 28tlbb.com - - 2adultflashgames.com - - 2anonymousproxy.com - - 2die4fam.com - - 2g34.com - - 2kanpian.com - - 2kk.cc - - 2lipstube.com - - 2m52.com - - 2p.net - - 2proxy.de - - 2shared.com - - 2tips.com - - 2unblockyoutube.com - - 2y8888.com - - 300avi.com - - 30boxes.com - - 30mail.net - - 3100book.com - - 3144.net - - 315lz.com - - 317bo.com - - 319papago.idv.tw - - 31bb.com - - 321soso.com - - 321youtube.com - - 32red.com - - 3333cn.com - - 333gx.com - - 33av.com - - 33md.net - - 33sqdy.info - - 33youtube.com - - 343dy.net - - 345.idv.tw - - 345mm.com - - 365sb.com - - 365singles.com.ar - - 38522.com - - 38ab.com - - 38lunli.info - - 38rv.com - - 39cao.com - - 3a6aayer.com - - 3animalsex.com - - 3animalsextube.com - - 3arabtv.com - - 3boys2girls.com - - 3dayblinds.com - - 3dsexvilla.com - - 3fm.nl - - 3i8i.net - - 3kiu.info - - 3kiu.net - - 3l87.com - - 3orod.com - - 3p-link.com - - 3proxy.de - - 3rd-party.org.uk - - 3ren.ca - - 3sat.de - - 3ssee.com - - 3ssnn.com - - 3suisses.fr - - 3wisp.com - - 400ai.com - - 432ppp.com - - 441mi.com - - 441mi.net - - 4444kk.com - - 444xg.com - - 445252.com - - 4466k.com - - 44qs.com - - 45bytes.info - - 45woool.com - - 460dvd.com - - 47ai.info - - 49.idv.tw - - 4everproxy.biz - - 4everproxy.com - - 4everproxy.de - - 4everproxy.org - - 4freeproxy.com - - 4ik.ru - - 4jj4jj.com - - 4kkbb.com - - 4musclemen.com - - 4newtube.com - - 4pda.to - - 4proxy.de - - 4shared.com - - 4ssnn.com - - 4tube.com - - 500px.org - - 50webs.com - - 514.cn - - 51eo.com - - 51luoben.com - - 51sole.com - - 51waku.com - - 5200dd.com - - 52682.com - - 5278.cc - - 52jav.com - - 52tlbb.com - - 52wpe.com - - 52yinyin.info - - 52youji.org - - 53yinyin.info - - 54271.com - - 543wyt.com - - 54dy.net - - 54xue.com - - 55399.com - - 555atv.com - - 573.jp - - 579uu.com - - 5927.cc - - 5d7y.net - - 5he5.com - - 5i01.com - - 5ik.tv - - 5isotoi5.org - - 5maodang.com - - 5proxy.com - - 5qulu.com - - 5udanhao.com - - 5xxn.com - - 5ye8.com - - 6299.net - - 63577.com - - 6363win.com - - 63jjj.com - - 64tianwang.com - - 66.ca - - 666814.com - - 666kb.com - - 666mimi.com - - 666nf.com - - 66green3.com - - 66peers.info - - 67160.com - - 678he.com - - 678kj.com - - 69696699.org - - 69goods.com - - 69jiaoyou.com - - 69kiss.net - - 69tubesex.com - - 6aaoo.com - - 6jsq.net - - 6k.com.tw - - 6law.idv.tw - - 6likosy.com - - 6park.com - - 6proxy.pw - - 6v6dota.com - - 7060.com - - 70chun.com - - 710knus.com - - 7111hh.com - - 712100.com - - 71ab.com - - 720dvd.com - - 7222hh.com - - 72sao.com - - 738877.com - - 74xy.com - - 753nn.com - - 7666hh.com - - 7744d.com - - 777daili.com - - 777pd.com - - 777rmb.com - - 777rv.com - - 77phone.com - - 77youtube.com - - 789ssss.com - - 7999hh.com - - 7cow.com - - 7daydaily.com - - 7dog.com - - 7msport.com - - 7net.com.tw - - 7sdy.com - - 7spins.com - - 7tvb.com - - 7xx8.com - - 7y7y.com - - 8-d.com - - 800086.com - - 800qsw.com - - 808080.biz - - 8090kk.com - - 8090xingnan.net - - 80smp4.com - - 851facebook.com - - 85cao.com - - 85cc.net - - 85gao.com - - 85st.com - - 87book.com - - 8811d.com - - 881903.com - - 888.com - - 88806.com - - 88chinatown.com - - 88luse.com - - 88sqdy.com - - 88wins.com - - 88xf.info - - 88xoxo.com - - 88xpxp.com - - 8ai.info - - 8ssee.com - - 9001700.com - - 909zy.net - - 90he.com - - 90kxw.com - - 90min.com - - 91530.com - - 91porn.com - - 91porn.me - - 92ccav.com - - 93tvb.net - - 94958.com - - 949wyt.com - - 95wen.com - - 970097.com - - 977ai.com - - 978z.com - - 97ai.com - - 97lm.com - - 97sequ.com - - 990578.com - - 991.com - - 9999cn.org - - 99bbs.org - - 99proxy.com - - 99u.com - - 99ubb.com - - 9b9b9b.com - - 9blow.com - - 9haow.cn - - 9irenti.com - - 9jng.com - - 9ofa.com - - 9svip.com - - 9tvb.com - - 9w9.org - - 9xyoutube.com - - a-fei.idv.tw - - a5.com.ru - - a688.info - - a88.us - - a888b.com - - a99.info - - aaak1.com - - aaak3.com - - aajjj.com - - aamacau.com - - aaproxy.pw - - abc.com - - abc.com.lb - - abc.com.pl - - abc.com.py - - abc.pp.ru - - ablwang.com - - abnandhrajyothy.com - - aboluowang.com - - abondance.com - - aboutgfw.com - - aboutsexxx.com - - abplive.in - - abs.edu.kw - - absoku072.com - - abuseat.org - - ac-rennes.fr - - ac-versailles.fr - - academyart.edu - - accessmeproxy.com - - accexam.com - - aceros-de-hispania.com - - acessototal.net - - acevpn.com - - achatdesign.com - - achi.idv.tw - - actimes.com.au - - actionnetwork.org - - activeproxies.org - - ad-tech.com - - adb.org - - additudemag.com - - addmefast.com - - adeex.in - - adj.idv.tw - - adobewwfotraining.com - - adoos.com - - adoptapet.com - - adscale.de - - adthrive.com - - adultcomicsclub.com - - adultcybersites.com - - adultfriendfinder.com - - adultgaga.com - - adultmegaporn.com - - adultporntoday.com - - adulttop50.nl - - adulttube.info - - advancedfileoptimizer.com - - advar-news.biz - - adxhosting.net - - ae5000.ru - - aeiou.pt - - aessuccess.org - - affa.az - - affaritaliani.it - - aflamhq.com - - afranet.com - - afrik.com - - aggressivebabes.com - - agrannyporn.com - - agridry.com - - ahbimi.com - - ahlalhdeeth.com - - ahmilf.com - - ahrchk.net - - ahrq.gov - - ailan.idv.tw - - aimizi.com - - aimorridesungabranca.com - - aion8.org - - aioproxy.com - - aip.idv.tw - - airasiago.com.my - - airbnb.co.in - - airbnb.com - - airbnb.it - - airtickets.gr - - airvpn.org - - aisex.com - - ait.org.tw - - aiweiwei.com - - aiweiweiblog.com - - aiyellow.com - - ajankamil.com - - ajansspor.com - - ajaxload.info - - ajsands.com - - ak-facebook.com - - akademikperspektif.com - - akahoshitakuya.com - - akamaihd.net - - akinator.com - - akradyo.net - - aktifhaber.com - - al-fadjr.com - - al-sharq.com - - al-watan.com - - al3aby8.com - - alaan.cc - - alaan.tv - - alabout.com - - alakhbaar.org - - alexa100.com - - alexandrebuisse.org - - alexdong.com - - alibabagroup.com - - alice.it - - alittlebitcheeky.com - - aliveproxy.com - - allabout.co.jp - - allasians.com - - allbankingsolutions.com - - allboner.com - - allcar.idv.tw - - alldrawnsex.com - - allfacebook.com - - allhardsextube.com - - alliance.org.hk - - allinfa.com - - allinmail.com.br - - allinvancouver.com - - alljackpotscasino.com - - allmovie.com - - allposters.com - - allproducts.com.tw - - allproxysites.com - - allrecipes.com.mx - - allrusamateurs.com - - alphaporno.com - - alsbbora.com - - alternativeincomeng.com - - alwadifa-maroc.com - - alwaysdata.com - - alwehda.gov.sy - - alyaoum24.com - - am730.com.hk - - amakings.com - - amarujala.com - - amarylliss.idv.tw - - amateurcommunity.de - - amateurgalls.com - - amateurhomevids.com - - amateurity.com - - amateursexy.net - - amazingsuperpowers.com - - amazonaws.com - - amazonsupply.com - - ameblo.jp - - ameli.fr - - amentotaxus.idv.tw - - america-proxy.com - - americanexpressonline.com.br - - americanmuscle.com - - americorps.gov - - amerikaninsesi.com - - amiami.jp - - aminsabeti.net - - amnesty.ca - - amnesty.ch - - amnesty.ie - - amnesty.org - - amnesty.org.au - - amnesty.org.gr - - amnesty.org.hk - - amnesty.org.in - - amnesty.org.nz - - amnesty.org.ru - - amnesty.org.tr - - amnesty.org.ua - - amnesty.org.uk - - amnestyusa.org - - amoiist.com - - amourangels.pw - - amz.tw - - ana-white.com - - anadoluhaberim.com - - analitikbakis.com - - analysiswebsites.com - - anchorfree.net - - andcycle.idv.tw - - andhrajyothy.com - - andhranews.net - - androidpit.com.br - - androidpub.com - - angele-proxy.info - - angrybirds.com - - anikore.jp - - animalhost.com - - anime-dojin.com - - anime-erodouga.com - - anime-media.com - - animecrazy.net - - animeshippuuden.com - - animespirit.ru - - aniscartujo.com - - annonce.cz - - anntw.com - - annunci.net - - anoniemsurfen.eu - - anonpass.com - - anonproxy.eu - - anonserver.se - - anonymityproxy.com - - anonymizer.com - - anonymous-proxy.com.de - - anonymous-surfing.eu - - anonymous24.pl - - anonymouse.me - - anonymouse.org - - anonymoussurf.us - - anonymouswebproxy.us - - anonymz.com - - anonysurf.com - - anpopo.com - - anquye.com - - ansar-alhaqq.net - - answering-islam.org - - anti-block.com - - antiwave.net - - antpoker.com - - anuntiomatic.com - - anuntul.ro - - anyporn.com - - anyporn.info - - anysex.com - - anyu.org - - aoaolu.cc - - aoaolu.com - - aoaolu.net - - aoaovod.com - - aobo.com.au - - aol.ca - - aol.co.uk - - aol.com - - aolnews.com - - aomiwang.com - - ap.org - - apartmentguide.com - - apastyle.org - - apetube.com - - apigee.com - - apontador.com.br - - aport.ru - - appedu.com.tw - - appleballa.com - - appledaily.com.hk - - appledaily.com.tw - - appleinsider.com - - appletube.ru - - appsfuture.info - - appspot.com - - appvuifacebook.com - - appy-geek.com - - apreslachat.com - - aq.com - - ar15.com - - arabo.com - - arabs-youtube.com - - arashzad.net - - arbitragetop.com - - archiproducts.com - - archive.is - - archive.org - - archive.today - - arctosia.com - - ard.de - - ardrone-forum.com - - argenprop.com - - argenta.be - - argentinabay.info - - arionmovies.com - - armadaboard.com - - armaniexchange.com - - armenpress.am - - arrow.com - - arsenal.com - - artcomix.com - - articlesphere.com - - artlebedev.ru - - arvixecloud.com - - asahichinese.com - - asg.to - - asgharagha.com - - ashburniceangels.org - - ashleyrnadison.com - - asiae.co.kr - - asiaharvest.org - - asian-boy-models.com - - asian-dolls.net - - asian-slave-boy.com - - asianbeautytube.com - - asianews.it - - asianxhamster.com - - asiasexvideos.com - - asiatgp.com - - askfrank.net - - askynz.net - - aspdotnet-suresh.com - - asredas.com - - asrekhodro.com - - assembla.com - - assemblee-nationale.fr - - astromendabarand.com - - asurekazani.com - - atavi.com - - atch.me - - atchinese.com - - atebits.com - - atgfw.org - - athensbars.gr - - atj.org.tw - - atlaspost.com - - atnext.com - - atresplayer.com - - attunlocker.us - - au123.com - - aucfan.com - - audible.co.uk - - aufflick.com - - augsburger-allgemeine.de - - aunblock.com - - aunblock.pk - - auoda.com - - ausnz.net - - aussieadultfriendfinder.com - - aussieproxy.info - - australia-proxy.com - - autoguide.com - - autohideip.com - - autopostfacebook.com - - autoposttofacebook.com - - autosottocosto.com - - autotun.net - - av-adult.com - - av-ok.com - - av100fun.com - - av101.net - - av1069.com - - av181.net - - av591.com - - av777.com - - av9.cc - - avaaz.org - - avatrade.com - - avaxhm.com - - avbaby.info - - avbdshop.com - - avcity.tv - - avcome.tw - - avcoy.com - - avdb.in - - avdd.net - - avdish.com - - avdvd.net - - avenue.com - - avenuesupply.ca - - avery.co.uk - - avery.com.mx - - avfacebook.com - - avhigh.net - - avhome.tv - - avisosdeocasion.com - - avlang.com - - avlang22.com - - avnoma.com - - avone.tv - - avsex8.com - - avsp2p.com - - avt111.com - - avtt.net - - avtt3.net - - avtt3.org - - avtube.tv - - avulu.com - - awebproxy.com - - awflasher.com - - axe-net.fr - - aybilgi.net - - azerbaycan.tv - - azerimix.com - - azerty123.com - - azoh.info - - azproxies.com - - b117f8da23446a91387efea0e428392a.pl - - b1secure.com - - ba-bamail.com - - bab-ul-islam.net - - babakdad.blogspot.fr - - babelio.com - - babesandstars.com - - baby-kingdom.com - - babynet.com.hk - - backchina.com - - backpackers.com.tw - - backyardchickens.com - - badjojo.com - - baguete.com.br - - bahianoticias.com.br - - baid.us - - baigevpn.com - - baise666.com - - bajarfacebook.com - - bajarmp3.net - - bajaryoutube.com - - balatarin.com - - ballpure.com - - bancamarche.it - - bancopostaclick.it - - bandicam.com - - bangbros1.com - - bankersadda.com - - bankexamstoday.com - - bankhapoalim.co.il - - banknetpower.net - - bankpasargad.com - - bannedbook.org - - bannedfuckers.com - - bao.li - - baozhi.ru - - barenakedislam.com - - barnabu.co.uk - - barracuda.com - - base99.com - - basil.idv.tw - - basware.com - - batiactu.com - - bayproxy.org - - bayvoice.net - - baywords.com - - bb66cc.org - - bbav360.com - - bbc.co.uk - - bbc.com - - bbc.org.cn - - bbcchinese.com - - bbci.co.uk - - bbcimg.co.uk - - bbg.gov - - bbgyy.net - - bbh.com - - bbproxy.pw - - bbs-tw.com - - bbs8888.net - - bbs97.com - - bbsindex.com - - bbsland.com - - bbtoystore.com - - bbwpornotubes.com - - bbwtubeporn.xxx - - bbwvideostube.com - - bbyy.name - - bc.vc - - bcc.com.tw - - bcchinese.net - - bdgest.com - - bdmote.net - - bdsm.com - - bdsm.com.tw - - bdsmbang.com - - bdsmforall.com - - bdsmvideos.net - - beatfiltering.com - - beauty88.com.tw - - beautygirl-story.com - - bebo.com - - becuonlinebanking.org - - befuck.com - - begeek.fr - - behindkink.com - - beijingspring.com - - belajariklandifacebook.com - - belastingdienst.nl - - belove.jp - - belta.by - - bemidjipioneer.com - - berlintwitterwall.com - - berm.co.nz - - best-handjob.com - - best-proxy.com.de - - best-videos-youtube.com - - bestandfree.com - - bestforchina.org - - bestfreevpn.com - - bestinstagram.com.br - - bestiz.net - - bestofyoutube.com - - bestporn.com - - bestpornstardb.com - - bestprox.com - - bestproxysites.net - - bestreams.net - - bestsecuritytips.com - - bestspy.net - - bestsurfing.info - - bestukvpn.com - - bestvideoonyoutube.com - - bestvideosonyoutube.com - - bestvintagetube.com - - bestvpn.com - - bestvpnservice.com - - bestvpnusa.com - - bestxxxlist.com - - besty.pl - - bestyoutubeproxy.info - - bet365.com - - bet365.com.au - - betbase1.info - - betcloud.com - - betfair.com - - betfair.com.au - - bettween.com - - betus.com.pa - - bewww.net - - beyondfirewall.com - - bfmtv.com - - bg67.com - - bgeneral.com - - bgf57.com - - bgproxy.org - - bgtorrents.info - - bharatstudent.com - - bhldn.com - - bia2.com - - biausa.org - - bibika.ru - - biblesforamerica.org - - biglobe.ne.jp - - bignews.org - - bigonyoutube.com - - bigpara.com - - bigsound.org - - bigtitmommy.com - - bigtits.com - - bigtitstokyo.com - - bih.nic.in - - bikei-newhalf.com - - binarymonster.net - - bind2.com - - bingplaces.com - - bingushop.com - - bioware.com - - bipic.net - - birdhouseapp.com - - biselahore.com - - bit.do - - bit.ly - - bitcointalk.org - - bithumen.be - - bitly.com - - bitshare.com - - bittorrent.com - - bizhat.com - - bizman.com.tw - - bizpowa.com - - bjnewlife.org - - bjzc.org - - blackdiamond-ai.com - - blacklogic.com - - blacksexsite.net - - blacktowhite.net - - blackvidtube.com - - blackvpn.com - - blancheporte.fr - - blanco.com - - blboystube.com - - blewpass.com - - bligoo.com - - blingblingsquad.net - - blinkx.com - - blip.tv - - blockcn.com - - blockedsiteaccess.com - - blog.com - - blog.idv.tw - - blogcatalog.com - - blogger.bj - - blogger.com - - blogger.com.br - - blogger3cero.com - - blogimg.jp - - bloglines.com - - bloglovin.com - - blogmarks.net - - blogmetrics.org - - blognevesht.com - - blogphongthuy.com - - blogs.com - - blogspot.ae - - blogspot.be - - blogspot.ca - - blogspot.ch - - blogspot.co.il - - blogspot.co.nz - - blogspot.co.uk - - blogspot.com - - blogspot.com.ar - - blogspot.com.au - - blogspot.com.br - - blogspot.com.es - - blogspot.com.tr - - blogspot.cz - - blogspot.de - - blogspot.dk - - blogspot.fi - - blogspot.fr - - blogspot.gr - - blogspot.hk - - blogspot.hu - - blogspot.ie - - blogspot.in - - blogspot.it - - blogspot.jp - - blogspot.mx - - blogspot.nl - - blogspot.no - - blogspot.pt - - blogspot.re - - blogspot.ro - - blogspot.ru - - blogspot.se - - blogspot.sg - - blogspot.sk - - blogspot.tw - - blogtd.org - - bloomberg.cn - - bloomberg.com - - bloomberg.com.br - - bloomberg.com.mx - - blowjobcollection.com - - bluesystem.ru - - bluexhamster.com - - blurry-eyes.info - - blurtit.com - - bnb89.com - - boardreader.com - - bodog168.com - - bodog88.com - - bofang.la - - boggleup.com - - bohemiancoding.com - - bolehvpn.net - - bollymeaning.com - - bollywood-mp3.com - - bom.gov.au - - bonbonme.com - - bonbonyou.com - - bondageco.com - - bondageposition.com - - bondagescape.com - - bondedomain.com - - bonny.idv.tw - - bonporn.com - - bonusvid.com - - book4u.com.tw - - bookbrowse.com - - bookfinder.com - - bookingbuddy.com - - bookmarkinghost.com - - books.com.tw - - booksforeveryone.org - - boolberry.blue - - boomplayer.com - - boomproxy.com - - boomtunnel.com - - boooobs.org - - boostwitter.com - - bootstrapvalidator.com - - borda.ru - - boredombash.com - - borsagundem.com - - bot.nu - - botanikreyon.org - - botanwang.com - - botid.org - - bouyguestelecom.com - - bowenpress.com - - bower.io - - box.com - - box.net - - boxcar.io - - boxcn.net - - boxofficemojo.com - - boxpn.com - - boxuesky.com - - boxun.com - - boxun.tv - - boyfriendtv.com - - boygloryhole.com - - boysfood.com - - bpergroup.net - - bps1025.com - - br-olshop.com - - braingle.com - - brainjuicer.com - - brainpop.fr - - bramka-proxy.pl - - bramkaproxy.net.pl - - brandibelle.com - - brassring.com - - bravejournal.com - - bravica.tv - - bravoerotica.com - - bravoteens.com - - bravotube.com - - bravotube.net - - brazilproxy.com - - brb.to - - break.com - - breakingtweets.com - - briefdream.com - - brino.info - - bristolpost.co.uk - - britishmuseum.org - - broadcastyoutube.com - - brokebackasians.com - - brownsugar.idv.tw - - browsec.com - - brsbox.com - - brt.it - - brutaltgp.com - - bsnl.co.in - - bt.com - - btcchina.com - - btdigg.org - - btkitty.com - - btolat.com - - btsmth.com - - btunnel.com - - bubukua.com - - buda.idv.tw - - budaedu.org - - budaedu.org.tw - - buddhanet.idv.tw - - buddhistchannel.tv - - budterence.tk - - bullog.org - - bullogger.com - - bunnylust.com - - buraydahcity.net - - buro247.ru - - busayari.com - - buscape.com.br - - business-gazeta.ru - - business.gov.au - - businessballa.com - - businessofcinema.com - - businessspectator.com.au - - businesstimes.com.cn - - businessweek.com - - bustycats.com - - busybits.com - - busytrade.com - - butterfunk.com - - buttfuckingbunch.com - - buxdot.com - - buy-instagram.com - - buyingiq.com - - buzzfeed.com - - buzzmag.jp - - buzzproxy.com - - buzztter.com - - bxdlw.com - - bxwx.net - - bxwx.org - - bycontext.com - - byethost8.com - - bypass-block.com - - bypass123.com - - bypassable.com - - bypassschoolfilter.com - - bypasssite.com - - bypassthat.com - - bypassthe.net - - bypassy.com - - byproxyserver.com - - bytbil.com - - c-spanvideo.org - - c009.net - - c2bsa.com - - cacaoweb.org - - cacnw.com - - cactusvpn.com - - caddy.idv.tw - - cadena100.es - - cadena3.com - - cafeblog.hu - - cafepress.com - - cafepress.com.au - - cahal-mania.com - - calameo.com - - calciatoribrutti.com - - calgarychinese.com - - calgarynewlife.com - - caloo.jp - - cam4.co.uk - - cam4.com - - cam4.com.au - - cam4.com.br - - cam4.com.cy - - cam4.com.tr - - cam4.jp - - cam4.nl - - camdough.com - - cameleo.ru - - cameracaptures.com - - camfrog.com - - campaignlive.co.uk - - campbellskitchen.com - - cams.com - - cams.com.au - - canada.com - - canadameet.me - - canalplus.fr - - canliskor.com - - canliyayin.org - - canoe.ca - - canonical.com - - cantv.net - - canyu.org - - cao.im - - cao31.com - - cao64.com - - cao89.com - - caobian.info - - caochangqing.com - - caoliushequ520.info - - caoporn.com - - capadefacebook.com - - captainsquarters.com - - captionsforyoutube.com - - car.com - - carabinasypistolas.com - - caradisiac.com - - carandclassic.co.uk - - careerlauncher.com - - cari.com.my - - carmotorshow.com - - cartoonanimefans.com - - cartoonmovement.com - - cartoonnetworkshop.com - - cartoonsexx.net - - cartoonsqueen.com - - carzone.ie - - casatibet.org.mx - - cashadproxy.info - - cashforsextape.com - - casinobellini.com - - casinoeuro.com - - casinolasvegas.com - - casinoriva.com - - castanet.net - - cat-world.com.au - - cathnews.com - - catholic.org.hk - - catholic.org.tw - - cathvoice.org.tw - - cbc.ca - - cbsnews.com - - cbzs887.cn - - cc-anime.com - - ccdaili.com - - ccdtr.org - - ccim.org - - ccproxy.pw - - ccthere.com - - cctongbao.com - - cctv5zb.com - - ccue.ca - - ccue.com - - ccyoutube.com - - cdiscount.com.co - - cdnet.tv - - cdnews.com.tw - - cdns.com.tw - - cdo23.idv.tw - - cdsmvod.com - - ce.gov.br - - ce4arab.com - - cecc.gov - - cegalapitasirorszagban.info - - cel.ro - - celebritymovieblog.com - - cellphoneshop.net - - centanet.com - - centerbbs.com - - centerblog.net - - centrometeoitaliano.it - - centurychina.com - - centurys.net - - cerdas.com - - cesumar.br - - cfish.idv.tw - - chabad.org - - chandan.org - - change.org - - change521.com - - changetheip.com - - changp.com - - channyein.org - - chapm25.com - - charonboat.com - - chaturbate.com - - chatzy.com - - chayici.info - - cheaperseeker.com - - cheapyoutube.com - - checkedproxylists.com - - checkmymilf.com - - checkthis.com - - cheeky.com.ar - - chengmingmag.com - - chengrenbar.com - - chenguangcheng.com - - chessbomb.com - - chezasite.com - - chicagonow.com - - chicasfacebook.com - - chiefsun.org.tw - - china-labour.org.hk - - china-proxy.org - - china-week.com - - china101.com - - china5000.us - - chinacity.be - - chinacityinfo.be - - chinadialogue.net - - chinadigitaltimes.net - - chinaelections.org - - chinaeweekly.com - - chinagfw.org - - chinagreenparty.org - - chinagrows.com - - chinahush.com - - chinainperspective.com - - chinainperspective.org - - chinalaborwatch.org - - chinamule.com - - chinapress.com.my - - chinaproxy.me - - chinareaction.com - - chinarightsia.org - - chinasmile.net - - chinatopix.com - - chinatown.com.au - - chinatungsten.com - - chinaworker.info - - chinayouth.org.hk - - chinese-hermit.net - - chinese.net.au - - chinesedaily.com - - chineseinla.com - - chineselovelinks.com - - chinesen.de - - chinesepen.org - - chinesepornweb.com - - chinesetalks.net - - chingcheong.com - - chinhphu.vn - - chodientu.vn - - choister.ru - - chosun.com - - christabelle.idv.tw - - christianmatchmaker.com - - christianstudy.com - - christiantimes.org.hk - - chrlawyers.hk - - chrome.com - - chubbyparade.com - - chubbyporn.xxx - - chubun.com - - chunshuitang.com.tw - - cieny.com - - cincodias.com - - cinematicket.org - - cinesport.com - - ciproxy.de - - circleofmoms.com - - circoviral.com - - citi.com - - citibank.co.jp - - citizenlab.org - - city365.ca - - city9x.com - - cityclubcasino.com - - cityvibe.com - - civicparty.hk - - civilmedia.tw - - civisec.org - - cixproxy.com - - ck101.com - - ckdvd.com - - ckf580.com - - classicalite.com - - classifieds4me.com - - classifiedsforfree.com - - claymont.com - - clb.org.hk - - cleanadulthost.com - - cleanfreeporn.com - - clearclips.com - - clearharmony.net - - clearhide.com - - clearpx.info - - clearwisdom.net - - cleoboobs.com - - clicic.com - - clickprotects.com - - clickxti.com - - clinica-tibet.ru - - clip.dj - - clipartpanda.com - - clipfish.de - - cliphunter.com - - cliponyu.com - - clipsonyoutube.com - - cliptoday.vn - - clipxoom.com - - clipyoutube.com - - clitgames.com - - cloaked.eu - - cloob.com - - cloudforce.com - - cloudvpn.biz - - clt20.com - - club-e.net - - clubedinheironofacebook.com - - clubthaichix.com - - cmstrader.com - - cmule.com - - cmule.net - - cn6.eu - - cna.com - - cna.com.br - - cna.com.tw - - cnabc.com - - cnavista.com.tw - - cnd.org - - cnitter.com - - cnn.com - - cnproxy.com - - cntraveller.com - - cnyes.com - - cnzz.cc - - co.tv - - cochlear.com - - code-club.idv.tw - - code1984.com - - codeasite.com - - codigoespagueti.com - - coenraets.org - - cofoo.com - - coinwarz.com - - colaclassic.co.uk - - colevalleychristian.org - - colfinancial.com - - collegeboard.com - - colormyfacebook.com - - com.uk - - comcast.com - - comdotgame.com - - comefromchina.com - - comicbook.com - - comlu.com - - commandarms.com - - companycheck.co.uk - - compareraja.in - - compass-style.org - - completelounge.com - - comprarseguidoresinstagram.com - - compressnow.com - - computervalley.it - - compython.net - - conexaokinghost.com.br - - configurarequipos.com - - connect.facebook.net - - consumer.es - - contactmusic.com - - contoerotico.com - - conversionhero.com.br - - convertisseur-youtube.com - - convertonlinefree.com - - convertyoutube.com - - coobai.com - - coobay.com - - cookieparts.com - - cookinglight.com - - coolaler.com - - coolbits.org - - coolloud.org.tw - - coolncute.com - - coolspotters.com - - coolsun.idv.tw - - copertinafacebook.com - - corchodelpais.com - - corpbank.com - - correct-install.com - - correio24horas.com.br - - correiobraziliense.com.br - - cortera.com - - cosmohispano.com - - cotweet.com - - cougarporn.com - - countryvpn.com - - couverturefacebook.com - - coveredca.com - - covertbrowsing.com - - cowcotland.com - - cpj.org - - cproxy.com - - cproxyer.com - - cpuid.com - - cqent.net - - cracked.com - - crackle.com - - crackle.com.ar - - crackle.com.br - - crackle.com.do - - crackle.com.mx - - crackle.com.pa - - crackle.com.ve - - crazys.cc - - crazyshirts.com - - creaders.net - - crearlistaconyoutube.com - - creartiendaenfacebook.com - - createit.pl - - creativebloq.com - - criarinstagram.com - - criarinstagram.com.br - - crmls.org - - crocoguide.com - - crocotube.com - - cronica.com.ar - - crossthewall.net - - crossvpn.org - - crownproxy.com - - crownroyal.com - - cruisecritic.com - - cshabc.com - - css-validator.org - - csuchico.edu - - ctfriend.net - - ctitv.com.tw - - cts.com.tw - - cttsrv.com - - ctunnel.com - - cu.edu.eg - - cubacontemporanea.com - - cuhkacs.org - - cuihua.org - - cuiweiping.net - - cultdeadcow.com - - culture.tw - - cum-in-air.com - - cumpool.com - - cumporntube.com - - cuponomia.com.br - - curejoy.com - - curezone.org - - curp.gob.mx - - currys.co.uk - - curtindoimagensnofacebook.com - - cute82.com - - cutedeadguys.net - - cvs.com - - cw.com.tw - - cwahi.net - - cwb.gov.tw - - cyber-ninja.jp - - cyberctm.com - - cyberghostvpn.com - - cybertranslator.idv.tw - - cycleworld.com - - cylex.com.au - - cytu.be - - cz.cc - - d-064.com - - d-agency.net - - d0z.net - - d100.net - - d1g.com - - d2jsp.org - - d3js.org - - d8.tv - - d9cn.com - - d9vod.com - - dabr.co.uk - - dadazim.com - - dadeschools.net - - dadi360.com - - daepiso.com - - dafahao.com - - daidostup.ru - - dailian.co.kr - - dailidaili.com - - dailila.net - - daily.mk - - dailydot.com - - dailyfx.com.hk - - dailyme.com - - dailymotion.com - - dailynews.com - - dailynorseman.com - - dailystrength.org - - dailytech.com - - dairymary.com - - daiwa21.com - - dajiyuan.com - - dajiyuan.eu - - dakdown.net - - dalailama-hamburg.de - - dalailama.com - - dalailamacenter.org - - dalailamaworld.com - - daliulian.com - - damimi.us - - dancingbear.com - - danfoss.com - - dangerproxy.com - - danjur.com - - danke4china.net - - dantenw.com - - danwei.org - - daolan.net - - dapetduitdaritwitter.com - - darmowe-proxy.pl - - dateformore.de - - davidguo.idv.tw - - davidnews.com - - davidziegler.net - - dawhois.com - - dayabook.com - - daylife.com - - dayoneapp.com - - dbs.com - - dcmilitary.com - - dd-peliculas.com - - dd858.com - - ddc.com.tw - - ddfnetwork.com - - ddhw.com - - ddlvalley.rocks - - ddns.me - - ddns.me.uk - - ddokbaro.com - - ddoo.cc - - ddsongyy.com - - de-sci.org - - dealam.com - - dearhoney.idv.tw - - dearmoney.idv.tw - - debian.org - - decathlon.com.br - - decathlon.in - - dedudu.com - - default-search.net - - defilter.us - - definebabe.com - - dekho.in - - deletefacebook.com - - delfield.com - - delhi.gov.in - - delshekaste.com - - demandware.net - - democrats.org - - demotivation.me - - denmarkbay.info - - denofgeek.us - - denysofyan.web.id - - depo.ua - - depqc.com - - derekhsu.homeip.net - - descargarinstagram.com - - descargarvideosfacebook.com - - descargaryoutube.com - - deskapplic.com - - destinychat.com - - destroymilf.com - - dewaweb.com - - deziyou.in - - df.gob.mx - - dglobe.com - - dgsnjs.com - - dhads.com - - dhl.com - - dhl.it - - diageo-careers.com - - diageo.com - - diaoyuislands.org - - diariodecuba.com - - diariodecuyo.com.ar - - diariodenavarra.es - - diariolasamericas.com - - diariovasco.com - - diary.ru - - dicasinstagram.com - - digisocial.com - - digitalcameraworld.com - - digitaljournal.com - - digitalkamera.de - - digitallink.info - - digitalroom.com - - digitalspy.co.uk - - digitaltrends.com - - diigo.com - - dilbert.com - - dimensiondata.com - - dinamina.lk - - dindo.com.co - - dinodirect.com - - dio.idv.tw - - dipity.com - - diply.com - - diputados.gob.mx - - discuss.com.hk - - discuss4u.com - - disise.com - - disney.es - - disney.pl - - disneyjunior.com - - disp.cc - - disput.az - - dit-inc.us - - ditenok.com - - diveintohtml5.info - - divxdl.info - - diwuji.cc - - diyidm.net - - dizhidizhi.com - - dizigold.com - - diziwu.com - - djazairess.com - - djjsq.com - - djorz.com - - djtechtools.com - - dkproxy.com - - dl-online.com - - dlink.com - - dm5.com - - dmm18.net - - dmnews.com - - dnb.com - - dns2go.com - - dnscrypt.org - - dnstube.tk - - do3n.com - - docbao.vn - - docstoc.com - - doctorproxy.com - - doctorvoice.org - - dogbreedinfo.com - - dogecoin.com - - dogideasite.com - - dogxxxtube.com - - dojin.com - - dok-forum.net - - dolc.de - - domai.nr - - domain.club.tw - - domain4ik.ru - - domik.ua - - dongfangshoulie.com - - dongle.cc - - dongtaiwang.com - - dongtaiwang.net - - dongyangjing.com - - donkparty.com - - dontfilter.us - - doo.idv.tw - - doobit.info - - dopr.net - - dorjeshugden.com - - dossierfamilial.com - - dotplane.com - - dotsub.com - - dotup.org - - dotvpn.com - - doubleclick.com - - douphine.com - - dousyoko.net - - douyutv.com - - downav.com - - downfacebook.com - - download-now-for-pc.net - - download.com - - download.com.vn - - doyouthinkimproxy.info - - dpp.org.tw - - dragonbyte-tech.com - - dragtimes.com - - draugas.lt - - dreammovies.com - - dreamnet.com - - dreamyoutube.com - - dribbble.com - - droidvpn.com - - dropbox.com - - dropbox.com.br - - dropboxproxy.com - - droptask.com - - drtuber.com - - drunkenteenorgies.com - - dsparking.com - - dtunnel.com - - dtz-ugl.com - - du.ac.in - - duantian.com - - dubinterviewer.com - - duck.hk - - duckduckgo.com - - duckload.com - - duga.jp - - duihua.org - - dunyabulteni.net - - dunyanews.tv - - duoweitimes.com - - duping.net - - dushi.ca - - dust-514.org - - dutchproxy.nl - - dvd-50.com - - dvdvideosoft.com - - dw-world.com - - dw-world.de - - dw.de - - dwheeler.com - - dwnews.com - - dxiong.com - - dy1.cc - - dy2018.com - - dy7788.com - - dy91.com - - dyhlw.com - - dylianmeng.com - - dynamo.kiev.ua - - dyndns.org - - dzemploi.org - - dzze.com - - e-dasher.com - - e-familynet.com - - e-gold.com - - e-info.org.tw - - e-kogal.com - - e-shop.gr - - e-spacy.com - - e-traderland.net - - e-travel.com - - e1.ru - - e123.hk - - e2020.co.nz - - e96.ru - - eagleproxy.com - - earthlinktele.com - - eastcoastmama.com - - eastgame.org - - easy-hideip.com - - easy604.com - - easyage.org - - easybranches.com - - easyca.ca - - easyfinance.ru - - easypic.com - - easyspace.com - - easyvpnservice.com - - easyweb.hk - - eazon.com - - ebaycommercenetwork.com - - ebony-beauty.com - - ebonytubetv.com - - ebookbrowse.com - - ebudka.com - - ebuyclub.com - - ecenter.idv.tw - - echo.msk.ru - - echoecho.com - - echofon.com - - ecommate.info - - ecommercebrasil.com.br - - economy.gov.az - - ecstart.com - - ecumenicalnews.com - - ecured.cu - - ecxs.asia - - edebiyatdefteri.com - - edgecastcdn.net - - edicypages.com - - edilly.com - - edmontonchina.com - - edomex.gob.mx - - edoors.com - - edp24.co.uk - - edtguide.com - - edubridge.com - - efcc.org.hk - - efe.com - - eff.org - - efpfanfic.net - - efukt.com - - efytimes.com - - egitimyuvasi.com - - egyig.com - - ehandel.se - - ej.ru - - ek.ua - - el-annuaire.com - - el-mexicano.com.mx - - elartedesabervivir.com - - elcolombiano.com - - eldiariomontanes.es - - eldiariony.com - - electronicsclub.info - - elefant.ro - - elephantjournal.com - - elevior.com - - elheraldo.co - - eliascleaners.co.uk - - elisabettabertolini.com - - eliteprospects.com - - elizabethavenuewest.com - - ellentv.com - - elleuk.com - - elmeme.me - - elmercurio.com - - elmundo.com.ve - - elnorte.com - - elon.edu - - elpais.com - - elpais.com.co - - elpais.com.do - - elpais.com.uy - - elsahfy.com - - elsalvadortv.org - - elseptimoarte.net - - eltondisney.com - - elwatan.com - - embedinstagram.com - - emedemujer.com - - emediate.eu - - emforce.co.kr - - emgog.com - - emilys-closet.com - - emojistwitter.com - - emory.edu - - emoticon-facebook.com - - empireonline.com - - employmentlawalliance.com - - empornium.me - - emptymirrorbooks.com - - emule-ed2k.com - - emvideira.com.br - - enbank.net - - encabezadostwitter.com - - encar.com - - encyclo.nl - - endeavor.org.br - - enel.com - - energy.gov - - enfal.de - - engadget.com - - enghelabe-eslami.com - - englishforeveryone.org - - englishfromengland.co.uk - - englishpen.org - - englishteastore.com - - enjoyfreeware.org - - enjoyproxy.com - - enjuice.com - - enladisco.com - - enstarz.com - - entel.cl - - entertainmentwise.com - - entirelypets.com - - entnt.com - - eogli.org - - eoidc.net - - eonline.com - - epfindia.com - - ephotozine.com - - epicporntube.com - - episcopalchurch.org - - epochhk.com - - epochtimes-bg.com - - epochtimes-romania.com - - epochtimes.co.il - - epochtimes.co.kr - - epochtimes.com - - epochtimes.com.br - - epochtimes.com.hk - - epochtimes.com.tw - - epochtimes.com.ua - - epochtimes.de - - epochtimes.fr - - epochtimes.ie - - epochtimes.it - - epochtimes.jp - - epochtimes.ru - - epochtimeschicago.com - - epochweekly.com - - epsport.idv.tw - - equinenow.com - - erabaru.net - - eremnews.com - - erepublik.com - - ergebnisselive.com - - ernstings-family.de - - eroharuhi.net - - eroilog.com - - erojump.net - - eroshinbo.com - - eroticsaloon.net - - erslist.com - - esecure.com.tw - - eshakti.com - - esp2505.info - - espreso.tv - - esquire.es - - estekhtam.com - - estwitter.com - - etadult.com - - etaiwannews.com - - etymonline.com - - eucasino.com - - eugendorf.net - - eulam.com - - euro2day.gr - - euromilhoes.com - - europages.com.ru - - europages.pl - - europalace.com - - europeanchessclubcup2014.com - - europroxy.eu - - eurotravel.idv.tw - - eurowon.com - - eva.vn - - eventure.com - - evestherenyoutube.com - - evite.com - - evous.fr - - exblog.co.jp - - excelsior.com.mx - - excite.es - - excnn.com - - exgfsheaven.com - - expat-dakar.com - - expatproxy.com - - expedia.ca - - expedia.co.kr - - expedia.com - - expedia.com.sg - - expedia.de - - expedia.fr - - expekt.com - - experts-univers.com - - exploader.net - - expofutures.com - - express-vpn.com - - express.be - - expressvpn.com - - expressvpn.org - - extmatrix.com - - extole.com - - extraproxy.com - - extravid.com - - extremeextremeextreme.com - - extremeftvgirls.com - - extremefuse.com - - extremetube.com - - exvagos.com - - exwolf.com - - eyny.com - - ezbox.idv.tw - - ezcommerce.com.br - - ezpc.tk - - ezpeer.com - - f4h.com - - faboroxy.com - - fabulousfoods.com - - facebook.com - - facebook.com.br - - facebook.com.pk - - facebook.com.vn - - facebook.net - - facehidden.com - - faceless.me - - factmonster.com - - factslides.com - - fail.hk - - failzoom.com - - fakku.net - - fakty.ua - - falsefire.com - - falundafa.org - - familjeliv.se - - familyfed.org - - familyfriendpoems.com - - fan-qiang.com - - fandejuegos.com - - fanfiction.net - - fangbinxing.com - - fanpagekarma.com - - fanqianghou.com - - fans4proxy.com - - fantasy-handjob.com - - fanyaylc.com - - fanyue.info - - fapdu.com - - fapvid.com - - farstwitter.com - - farwestchina.com - - fashionhotbox.com - - fashionnstyle.com - - fashionpulis.com - - fashionsnap.com - - fast-proxy.com.de - - fastest-proxy.com.de - - fastfreeproxy.info - - fastfreeproxy.org - - fastfresh.info - - fastpriv.com - - fastproxyfree.info - - fastproxynetwork.com - - fastusaproxy.com - - fat-ass-tube.com - - fatbrownguy.com - - fatest.ga - - fatgirlsex.net - - fatporn.xxx - - fatproxy.com - - favotter.net - - favstar.fm - - fawanghuihui.org - - fbcdn.com - - fbcdn.net - - fbunblocker.net - - fc2.com - - fc2blog.net - - fc2china.com - - fccash.com - - fcdallas.com - - fdbox.com - - fdc89.jp - - feathersite.com - - feber.se - - fednetbank.com - - feedburner.com - - fengfire.info - - fengzhenghu.com - - ferrariworld.com - - fescomail.net - - fetishbox.com - - fetishpornfilms.com - - feuvert.fr - - fffff.at - - ffproxy.pw - - ffsurf.net - - fgmtv.org - - fhn.gov.az - - fi5.us - - fiat.it - - fibhaber.com - - figaret.com - - fightnews.com - - file.sh - - filefactory.com - - filefap.com - - fileflyer.com - - filegir.com - - files2me.com - - filesdownloader.com - - fileserve.com - - film4ik.ru - - filmaffinity.com - - filmesdoyoutube.com - - filmfare.com - - filmuletul-zilei.ro - - filmux.net - - filterbypass.me - - filthdump.com - - finalfantasyxiv.com - - financetwitter.com - - finanzaspersonales.com.co - - finanzfrage.net - - finanznachrichten.de - - finchvpn.com - - findamo.com - - findit.fi - - findmespot.com - - fineproxy.org - - finevids.com - - finlandbay.info - - finmarket.ru - - fireofliberty.org - - fireplacecountry.com - - firetweet.io - - firstanalquest.com - - firstmerchants.com - - firstrowproxy.org - - firstrowpt.eu - - firsttoknow.com - - fit4life.ru - - fitnessfirst.co.th - - fitnessfirst.co.uk - - fitnessfirst.com.au - - fitpregnancy.com - - fixproxy.com - - fizzik.com - - flagma.ru - - flagsonline.it - - flamefans.com - - flashpoint-intel.com - - flashpornmovs.com - - flashscore.ro - - flatuicolors.com - - flickr.com - - flipit.com - - flipora.com - - flitto.com - - flnet.org - - fluege.de - - fluentu.com - - fly4ever.me - - flymeow.idv.tw - - flypgs.com - - flyproxy.com - - flyvpn.com - - flyvpn.net - - fm949sd.com - - focusvpn.com - - folkfacebook.com - - follow-instagram.com - - followersinstagram.com - - fontriver.com - - foodandwine.com - - foodbloggerpro.com - - foofind.com - - foolsmountain.com - - fooooo.com - - footeo.com - - footwearetc.com - - force.com - - forcedflix.com - - forfreesurfing.net - - foroiphone.com - - forrent.jp - - forum4hk.com - - forums-free.com - - forumx.com.br - - foto-girl.com - - fotosparatwitter.com - - fovanesa.com - - foxbusiness.com - - fpmt.org - - fpsc.gov.pk - - fpsexgals.com - - fqrouter.com - - fr.cr - - france24.com - - france99.com - - francebleu.fr - - franceinfo.fr - - franceinter.fr - - franceproxy.net - - franceproxy.org - - frasefacebook.com - - frasescelebres.net - - frat-party-sluts.com - - frazpc.pl - - frcnb.com - - freakonomics.com - - freakshare.com - - fredasvoice.com - - free--proxy.net - - free-ebooks.net - - free-hideip.com - - free-mp3-download.org - - free-onlineproxy.com - - free-proxy-online.com - - free-proxy.com.de - - free-proxyserver.com - - free-proxysite.com - - free-sexvideosfc2.com - - free-ssh.com - - free-teen-pussy.com - - free-unblock.com - - free-web-proxy.de - - free-webproxy.com - - free-xxx-porn.org - - free.fr - - free18.net - - free4proxy.tv - - free4u.com.ar - - free8.com - - freeanimalsextube.net - - freeanimesonline.com - - freebase.com - - freebearblog.org - - freebie-ac.com - - freebypass.com - - freebypassproxy.com - - freecanadavpn.com - - freechal.com - - freedom-ip.com - - freedomhouse.org - - freefc2.com - - freegao.com - - freehentaimanga.net - - freehostia.com - - freekatlitter.com - - freelibs.org - - freelotto.com - - freemp3in.com - - freemp3video.net - - freemp3x.org - - freenet-china.org - - freenetproject.org - - freeninjaproxy.com - - freeninjaproxy.info - - freeoda.com - - freeopenproxy.com - - freeopenvpn.com - - freeoz.org - - freepen.gr - - freepeople.com - - freephotoseries.com - - freeporn.to - - freepornofreeporn.com - - freepptpvpn.net - - freeproxy-server.net - - freeproxy.io - - freeproxy.net - - freeproxy.ro - - freeproxy4you.com - - freeproxylists.com - - freeproxyserver.ca - - freeproxyserver.net - - freeproxyserver.uk - - freeproxytochangeip.com - - freeproxyweblist.com - - freesafeip.com - - freeserve.co.uk - - freesex8.com - - freesextube.com - - freesoft.ru - - freespeechdebate.com - - freesstpvpn.com - - freetibet.org - - freevideoproxy.com - - freeviewmovies.com - - freevpn.cc - - freevpnsakura.com - - freevpnspot.com - - freevpnssh.com - - freevpnssh.org - - freevpnworld.com - - freewebproxy.asia - - freewebproxy.com - - freewebproxy.in - - freewebproxy.info - - freewebproxy.us - - freewebs.com - - freewebtemplates.com - - freeweibo.com - - freewsodownloads.net - - freexhamster.com - - freexinwen.com - - freeyellow.com - - freeyoutubeproxy.org - - frenchweb.fr - - fresh-proxies.net - - freshasianthumbs.com - - freshdesk.com - - freshersvoice.com - - freshmail.pl - - freshproxy.nu - - freshproxylist.com - - freshteenz.net - - freshxxxtube.com - - friendfeed.com - - fring.com - - frombar.com - - fromplay.com - - frontlinedefenders.org - - frootvpn.com - - fsurf.com - - ftah.idv.tw - - fucd.com - - fuckcnnic.net - - fucked-tube.com - - fuckenbored.com - - fuckenbored.net - - fuckmyrealwife.com - - fucknvideos.com - - fuimpostingit.com - - fulikong.com - - fullcelulares.com - - fulldls.com - - fullmovieyoutube.com - - fulltiltpoker.com - - fulltubemovies.com - - fullxhamster.com - - fullyporn.com - - funcionpublica.gob.mx - - funf.tw - - funp.com - - funp.com.tw - - funproxy.net - - furfur.me - - futebolaovivo.net - - futfanatics.com.br - - futube.net - - futurechinaforum.org - - futureproxy.com - - fuugle.net - - fuuzoku.info - - fux.com - - fvpn.com - - fxgm.com - - fxxgw.com - - fydownload.com - - fzlm.com - - g-cash.biz - - gaeproxy.com - - gaforum.org - - gagamatch.com - - gaggedtop.com - - gagreport.com - - galya.ru - - gamcore.com - - gamebase.com.tw - - gamecopyworld.com - - gamejolt.com - - gamer.com.tw - - games.gr - - gamesofdesire.com - - gamestlbb.com - - gamez.com.tw - - gamousa.com - - gangbang-arena.com - - ganges.com - - ganhareuromilhoes.com - - gao01.com - - gao41.com - - gaochunv.com - - gaoming.net - - gaopi.net - - gaoyangsl.com - - gap.co.uk - - gap.eu - - garancedore.fr - - gastronom.ru - - gatguns.com - - gather.com - - gatherproxy.com - - gati.org.tw - - gawkerassets.com - - gay-youtube.com - - gaybeef.com - - gaycockporn.com - - gaym.jp - - gaypornpicpost.com - - gazeta.pl - - gazeta.ru - - gazetadita.al - - gazetaesportiva.net - - gazete2023.com - - gazeteler.com - - gazo-ch.net - - gazotube.com - - gazzettadiparma.it - - gblocker.info - - gcll.info - - gcpnews.com - - gdbt.net - - gdkexercisetherapy.com - - gebnegozionline.com - - geekmade.co.uk - - geeksaresexy.net - - geeksnude.com - - gegasurf.ga - - gemscool.com - - gen.xyz - - general-ebooks.com - - general-porn.com - - gengfu.net - - genymotion.com - - geocities.co.jp - - geocities.com - - geomedian.com - - georgia.gov - - german-proxy.com.de - - german-proxy.de - - german-webproxy.de - - germany-proxy.com.de - - germanybay.info - - gesundheitsfrage.net - - getchu.com - - getcloak.com - - getdogsex.com - - getfoxyproxy.org - - getfreedur.com - - getiantem.org - - getit.in - - getiton.com - - getjetso.com - - getlantern.org - - getmema.com - - getsocialscope.com - - getusvpn.com - - getyouram.com - - gfacebook.com - - gfbv.de - - gfsale.com - - gfsoso.com - - gfw.org.ua - - gfwhiking.org - - ggdaohang.com - - ggpht.com - - ggproxy.pw - - ggssl.com - - ghostery.com - - gi55.com - - gian.idv.tw - - gianttiger.ca - - giddens.idv.tw - - gift001.com - - gifyoutube.com - - gigabyte.com - - gigantits.com - - gigantti.fi - - gigporno.ru - - gigsandfestivals.co.uk - - gipsyteam.ru - - girlsgogames.co.uk - - girlsplay.com - - gita.idv.tw - - gitbooks.io - - github.com - - gizbot.com - - gizlen.net - - gizmodo.com - - glamour.ru - - glassofporn.com - - glavcom.ua - - glgoo.com - - global-proxy.com - - global-unity.net - - globalewallet.com - - globalinventions.co.uk - - globalsources.com.cn - - globalvoicesonline.org - - globsayasytes.net - - glock.com - - gloryhole.com - - glype-proxy.info - - gmailproxy.com - - gmane.org - - gmeihua.com - - gnway.net - - go-fuzoku.tv - - go-pki.com - - go2av.com - - goagent.biz - - goalad.com - - gob.ve - - god.tv - - godsdirectcontact.com - - godsdirectcontact.info - - godsdirectcontact.org - - godsdirectcontact.org.tw - - gofirefly.org - - gofollow.fr - - gofollow.info - - gogames.me - - gogo2sex.com - - gohappytime.com - - gohawaii.com - - goibibo.com - - goingthere.org - - golang.org - - goldasians.com - - goldbet.com - - goldjizz.com - - goldproxylist.com - - golfdigest.com - - gomko.net - - gongwt.com - - gonzoo.com - - goo.gl - - goodbyemydarling.com - - goodnews.or.kr - - goodreaders.com - - goodreads.com - - goodthaigirl.com - - goodtv.tv - - google-analytics.com - - google.ad - - google.ae - - google.al - - google.am - - google.as - - google.at - - google.az - - google.ba - - google.be - - google.bf - - google.bg - - google.bi - - google.bj - - google.bs - - google.bt - - google.by - - google.ca - - google.cat - - google.cd - - google.cf - - google.cg - - google.ch - - google.ci - - google.cl - - google.cm - - google.cn - - google.co.ao - - google.co.bw - - google.co.ck - - google.co.cr - - google.co.id - - google.co.il - - google.co.in - - google.co.jp - - google.co.ke - - google.co.kr - - google.co.ls - - google.co.ma - - google.co.mz - - google.co.nz - - google.co.th - - google.co.tz - - google.co.ug - - google.co.uk - - google.co.uz - - google.co.ve - - google.co.vi - - google.co.za - - google.co.zm - - google.co.zw - - google.com - - google.com.af - - google.com.ag - - google.com.ai - - google.com.ar - - google.com.au - - google.com.bd - - google.com.bh - - google.com.bn - - google.com.bo - - google.com.br - - google.com.bz - - google.com.co - - google.com.cu - - google.com.cy - - google.com.do - - google.com.ec - - google.com.eg - - google.com.et - - google.com.fj - - google.com.gh - - google.com.gi - - google.com.gt - - google.com.hk - - google.com.jm - - google.com.kh - - google.com.kw - - google.com.lb - - google.com.ly - - google.com.mm - - google.com.mt - - google.com.mx - - google.com.my - - google.com.na - - google.com.nf - - google.com.ng - - google.com.ni - - google.com.np - - google.com.om - - google.com.pa - - google.com.pe - - google.com.pg - - google.com.ph - - google.com.pk - - google.com.pr - - google.com.py - - google.com.qa - - google.com.sa - - google.com.sb - - google.com.sg - - google.com.sl - - google.com.sv - - google.com.tj - - google.com.tr - - google.com.tw - - google.com.ua - - google.com.uy - - google.com.vc - - google.com.vn - - google.cv - - google.cz - - google.de - - google.dj - - google.dk - - google.dm - - google.dz - - google.ee - - google.es - - google.fi - - google.fm - - google.fr - - google.ga - - google.ge - - google.gg - - google.gl - - google.gm - - google.gp - - google.gr - - google.gy - - google.hn - - google.hr - - google.ht - - google.hu - - google.ie - - google.im - - google.iq - - google.is - - google.it - - google.je - - google.jo - - google.kg - - google.ki - - google.kz - - google.la - - google.li - - google.lk - - google.lt - - google.lu - - google.lv - - google.md - - google.me - - google.mg - - google.mk - - google.ml - - google.mn - - google.ms - - google.mu - - google.mv - - google.mw - - google.ne - - google.nl - - google.no - - google.nr - - google.nu - - google.pl - - google.pn - - google.ps - - google.pt - - google.ro - - google.rs - - google.ru - - google.rw - - google.sc - - google.se - - google.sh - - google.si - - google.sk - - google.sm - - google.sn - - google.so - - google.sr - - google.st - - google.td - - google.tg - - google.tk - - google.tl - - google.tm - - google.tn - - google.to - - google.tt - - google.vg - - google.vu - - google.ws - - googleadservices.com - - googleapis.com - - googlecode.com - - googlepages.com - - googlesile.com - - googleusercontent.com - - googlevideo.com - - gooya.com - - gopetition.com - - goproxing.com - - goproxyserver.com - - gorsuch.com - - gospelherald.com - - gospelherald.com.hk - - gossip-tv.gr - - gostosanovinha.com - - gosurf.asia - - gotop.idv.tw - - gotrusted.com - - goudengids.be - - gov.ar - - govorimpro.us - - gowalla.com - - gownideasite.com - - goxfc.com - - gpo.gov - - gpodder.net - - gpx.idv.tw - - gr24.us - - grader.com - - grafikart.fr - - grandascent.com - - grandepremio.com.br - - grangorz.org - - graphis.ne.jp - - greatfire.org - - greatfirewallofchina.org - - greecebay.info - - greenhousechurch.org - - greenparty.org.tw - - greenproxy.net - - greenvpn.net - - greenvpn.org - - gremlinjuice.com - - grjsq.me - - grjsq.tv - - group-facials.com - - gsp.ro - - gstatic.com - - gsw777.com - - gt3themes.com - - guanyincitta.com - - guardster.com - - guffins.com - - guihang.org - - guilinok.com - - guitarworld.com - - gujarat.gov.in - - gun-world.net - - gun.in.th - - gunsamerica.com - - gunsandammo.com - - gusttube.com - - guubii.info - - gvhunter.com - - gvm.com.tw - - gyalwarinpoche.com - - gypsyxxx.com - - gywys.com - - gzbolinktv.com - - gzdssf.com - - gzm.tv - - h1de.net - - h31bt.net - - h33t.to - - h528.com - - haaretz.co.il - - haaretz.com - - haber5.com - - habercim19.com - - habername.com - - hack85.com - - hacken.cc - - hacker.org - - hacking-facebook.com - - hackinguniversity.in - - hagah.com.br - - hairy-beauty.com - - hairy-nudist.com - - hakchouf.com - - hakkatv.org.tw - - hallels.com - - hama-k.com - - hanamoku.com - - handbrake.fr - - hani.co.kr - - hanunyi.com - - hao001.net - - hao123.com.br - - hao123114.com - - haokan946.cn - - haosf.com - - haosf.com.cn - - haoyun01.cf - - happycampus.com - - happytrips.com - - haproxy.org - - hardsextube.com - - hardware.com.br - - hardxhamster.com - - harrypottershop.com - - harunyahya.com - - hattrick.org - - have8.com - - hd-blow.com - - hd-feet.com - - hd-porn-movies.com - - hd-xhamster.com - - hdb.gov.sg - - hdbird.com - - hdteenpornmovies.com - - hdwallpapersinn.com - - hdwing.com - - hdzion.com - - healthgenie.in - - hearstmags.com - - heart-youtube.com - - hebao.net - - hecaitou.net - - hechaji.com - - hegre-art.com - - heishou.cn - - heix.pp.ru - - heji700.com - - hellocoton.fr - - hellotxt.com - - hellouk.org - - hellporno.com - - hells.pl - - helpeachpeople.com - - helptaobao.cn - - helpzhuling.org - - henhenpeng8.com - - hennablogspot.com - - hentai-high-school.com - - hentaimangaonline.com - - hentaitube.tv - - hentaivideoworld.com - - hentaiza.net - - heritage.org - - hermanzegerman.com - - heroeswm.ru - - herokuapp.com - - heroproxy.com - - herozerogame.com - - herrenausstatter.de - - hexi-ha.com - - hexieshe.com - - heyproxy.com - - heywire.com - - hfacebook.com - - hgseav.com - - hhproxy.pw - - hi-kiss.com - - hi-on.org.tw - - hibiya-lsp.com - - hiddengood.info - - hide-me.org - - hide.me - - hide.pl - - hideandgo.com - - hidebux.com - - hidebuzz.com - - hidebuzz.us - - hidedoor.com - - hideip.co - - hideipfree.com - - hideipproxy.com - - hideipvpn.com - - hideman.net - - hideme.be - - hideme.io - - hideme101.info - - hideme102.info - - hideme108.info - - hideme110.info - - hidemenow.net - - hidemyass.com - - hidemybox.com - - hidemyipaddress.org - - hidemytraxproxy.ca - - hideninja.com - - hideoxy.com - - hidetheinternet.com - - hidethisip.net - - hidevpn.asia - - hidewebsite.com - - hidexy.com - - hidingnow.org - - hifi-forum.de - - higfw.com - - high-stone-forum.com - - hihiforum.com - - hilive.tv - - hiload.org - - hiload.pk - - himalayanglacier.com - - hime.me - - himekuricalendar.com - - himemix.com - - hinet.net - - hiroshima-u.ac.jp - - hispeedproxy.com - - hisupplier.com - - hitfix.com - - hitgelsin.com - - hitproxy.com - - hiwihhi.com - - hizb-ut-tahrir.info - - hizb-ut-tahrir.org - - hjclub.info - - hk-pub.com - - hk.nextmedia.com - - hk32168.com - - hk5.cc - - hkatvnews.com - - hkbf.org - - hkbigman.net - - hkbookcity.com - - hkdailynews.com.hk - - hkej.com - - hkepc.com - - hkforum.info - - hkfreezone.com - - hkgolden.com - - hkgreenradio.org - - hkheadline.com - - hkhrm.org.hk - - hkjp.org - - hkptu.org - - hkreporter.com - - hku.hk - - hkzz8.com - - hloli.net - - hmhack.com - - hmongapp.com - - hmonghot.com - - hmongjob.com - - hmongplay.com - - hmongplus.com - - hmtweb.com - - hobbylobby.com - - hockeyapp.net - - hohosex.com - - hola.org - - holidayautos.de - - holland.idv.tw - - homcom-shop.de - - homecinema-fr.com - - homeftp.net - - homegrownfreaks.net - - homemademoviez.com - - homemadetubez.com - - homenet.org - - homeperversion.com - - homepornadventures.com - - homestayin.com - - hometeenmovs.com - - hometied.com - - hongzhi.li - - hooppay.com - - hootlet.com - - hootsuite.com - - hopto.org - - hornybbwtube.com - - horo.idv.tw - - horukan.com - - host1free.com - - host4post.pw - - hostels.com - - hostingbulk.com - - hostinger.ae - - hostinger.co.uk - - hostinger.com.br - - hostinger.es - - hostlove.com - - hot-sex-tube.com - - hot.ee - - hot50plus.com - - hotav.tv - - hotbox.com - - hotcouponworld.com - - hotfreevpn.com - - hotfrog.com.tw - - hotgamesforgirls.com - - hotgoo.com - - hothmong.com - - hothouse.com - - hotline.ua - - hotnakedmen.com - - hotpepper.jp - - hotpornshow.com - - hotpotato.com - - hotsale.com.mx - - hotshame.com - - hotspotshield.com - - hotteenmovie.com - - hottystop.com - - hotxhamster.com - - housetohome.co.uk - - houseweb.com.tw - - how-to-diy.org - - howproxy.com - - howstuffworks.com - - hoyts.com.ar - - hp-ez.com - - hq-sex-tube.com - - hq-xhamster.com - - hq-xnxx.com - - hqcdp.org - - hqfemdom.com - - hqmovies.com - - hqsexygirls.com - - hrblock.com - - hrcir.com - - hrea.org - - hrichina.org - - hrnabi.com - - hrw.org - - hsn.com - - hsselite.com - - hst.net.br - - hstbr.net - - hstd.net - - hstern.net - - hstt.net - - ht-afghanistan.com - - htfcn.com - - htkou.net - - htmlpublish.com - - httpproxy.se - - huaglad.com - - huanghuagang.org - - huaren.us - - huarenlife.com - - hudatoriq.web.id - - hugeinc.com - - huhaitai.com - - hulkshare.com - - humanite.presse.fr - - humanmetrics.com - - humanservices.gov.au - - hummingbird4twitter.com - - hung-ya.com - - hunturk.net - - huomie.com - - husaimeng.com - - hussytube.com - - hustlerhuns.com - - hut2.ru - - hutong9.net - - huyan.web.id - - huyandex.com - - hw.ac.uk - - hxiaoshuo.net - - hypergames.net - - hyperinzerce.cz - - i-cable.com - - i-sux.com - - i-write.idv.tw - - iam.ma - - iamabigboss.info - - ianker.com - - iask.ca - - ibc128.com - - iberia.com - - ibibo.com - - iblist.com - - iboner.com - - ibook.idv.tw - - ibope.com.br - - ibotube.com - - ibtimes.com - - ibvpn.com - - icams.com - - iceporn.com - - icerocket.com - - icicibank.co.in - - icij.org - - icrt.cu - - icyleaf.com - - id4.idv.tw - - idaiwan.com - - idamericany.com - - iddaa.com - - idealista.it - - identi.ca - - idesktop.tv - - idfacebook.com - - idhostinger.com - - idokep.hu - - idoneum.com - - idouga.com - - idownloadplay.com - - idownloadsnow.com - - idreamx.com - - idsam.com - - idv.tw - - idx.co.id - - ie666.net - - ied2k.net - - ifa-berlin.de - - ifanqiang.com - - ifanr.com - - ifc.com - - ifconfig.me - - ifcss.org - - ifilm.com - - ifilm.com.tw - - ifttt.com - - ig.com.br - - igafencu.com - - igfw.net - - igogo.es - - igotmail.com.tw - - ihaveanidea.org - - ihavesmalltits.com - - ihh.org.tr - - iiberry.com - - iij4u.or.jp - - iiproxy.pw - - ijapaneseporn.com - - ikea.ru - - ikeepbookmarks.com - - iklanlah.com - - ilgiornaledifacebook.com - - ilkehaberajansi.com.tr - - ilmattino.it - - ilovecougars.com - - ilovemature.net - - ilovemobi.com - - iloveuu.info - - ilovexhamster.com - - ilsoftware.it - - ilvpn.com - - im88.tw - - imagefap.com - - imageflea.com - - imagem-para-facebook.com - - imagenesenfacebook.com - - imagenesyfrasesparafacebook.com - - imagenparaelfacebook.com - - imagenparafacebook.com - - imagensemensagensparafacebook.com - - imagesfacebook.com - - imageslove.net - - imasteryoutube.com - - imazing.idv.tw - - imb.org - - imena.ua - - img.ly - - imgettingthere.com - - imgfarm.com - - imglory.com - - imkev.com - - imlive.com - - immigration.gov.tw - - immoral.jp - - impots.gouv.fr - - improxy.info - - imss.gob.mx - - imujer.com - - in-disguise.com - - in99.org - - inbanban.com - - inblogspot.com - - incezt.net - - incloak.com - - increase-youtube.com - - indamail.hu - - independent.ie - - india.com - - indiabay.info - - indiacom.com - - indiafreestuff.in - - indianproxy.biz - - indiapost.gov.in - - indiaproxy.org - - indiemerch.com - - indigo.ca - - indonesiabay.info - - indonesianmotorshow.com - - indopos.co.id - - indosat.com - - indymedia.org - - ineedhits.com - - infinitummovil.net - - info-graf.fr - - info-net.com.pl - - infolibre.es - - infon.ru - - informacion-empresas.com - - informationisbeautiful.net - - infoworld.com - - ing.dk - - ingresosextrasconyoutube.com - - inkclub.com - - inkui.com - - inmediahk.net - - innogames.com - - inosmi.ru - - inote.tw - - insanetrafficnow.info - - insee.fr - - insidefacebook.com - - insight.co.kr - - insomnia247.nl - - instagram.com - - instagram.com.br - - instagramproxy.com - - installmac.com - - instapaper.com - - interesnitee.info - - intermargins.net - - internetbrands.com - - internetcloak.com - - interoperabilitybridges.com - - interstats.org - - intertelecom.ua - - intertwitter.com - - interweavestore.com - - inyourpocket.com - - io.ua - - iobit.com - - ioshow.com - - ioxy.de - - ipadizate.es - - ipanelonline.com - - ipassexam.com - - ipchangeproxy.com - - ipchanging.com - - ipcloak.us - - ipconceal.com - - ipgizle.net - - iphider.org - - iphiderpro.com - - iphon.fr - - iphone-dev.org - - iphonedev.co.kr - - iphoster.net - - ipjetable.net - - iplama.com - - ipmask.us - - ipredator.se - - iproducts.com.tw - - iproxy07.com - - iptv.com.tw - - ipv6proxy.net - - ipvanish.com - - iranbay.info - - irangreenvoice.com - - iranian.com - - iraniproxy.com - - iranproud.com - - iranvolleyball.com - - irasutoya.com - - iredmail.org - - irelandbay.info - - ironfx.com - - isaacmao.com - - isb.edu - - iset.com.tw - - isikinsaatltd.com.tr - - islam.org.hk - - islamhouse.com - - islamicawakening.com - - islamicity.com - - islamtoday.net - - island.lk - - ismalltits.com - - isnotonfacebook.com - - isp-unblocker.com - - ispban.com - - ispot.tv - - israelnationalnews.com - - istars.co.nz - - istef.info - - istiqlalhaber.com - - istockphoto.com - - isuntv.com - - italybay.info - - itar-tass.com - - itavisen.no - - itbazar.com - - itespresso.fr - - ithacavoice.com - - ithome.com.tw - - itweet.net - - iu45.com - - iumsonline.org - - iunlocker.net - - ivacy.com - - ivc-online.com - - iwebproxy.com - - ixigo.com - - ixquick-proxy.com - - ixquick.com - - iyin.net - - izaobao.us - - izihost.org - - izles.net - - izlesem.org - - izlesene.com - - j-a-p-a-n.com - - j.mp - - j7wyt.com - - jackjia.com - - jackpot.tv - - jacso.hk - - jagoinvestor.com - - jahproxy.com - - jaimelovesstuff.com - - jamaat.org - - jamesedition.com - - janes.com - - japan-whores.com - - japanesesportcars.com - - japanpost.jp - - japanweb.info - - japanwebproxy.com - - jasaoptimasitwitter.com - - jasonaldean.com - - jav188.com - - javdownloader.info - - javhot.org - - javme.com - - javpee.com - - javzoo.com - - jbtalks.cc - - jdbbs.com - - jeepoffers.ca - - jeevansathi.com - - jerusalem.com - - jetztspielen.de - - jeux.fr - - jhalderm.com - - jiehua.cz - - jiejieshe.com - - jiepaiok.com - - jiepang.com - - jihadology.net - - jiji.com - - jimoparty.com - - jin115.com - - jingpin.org - - jinhai.de - - jiruan.net - - jisudan.org - - jivosite.com - - jizzbo.com - - jizzhut.com - - jjgirls.com - - jkb.cc - - jkforum.net - - jlgcyy.com - - jma-net.go.jp - - jmbullion.com - - jobijoba.com - - jobrapido.com - - jobs.net - - jobstreet.com.ph - - joeproxy.co.uk - - joeyrobert.org - - jofogas.hu - - jonny.idv.tw - - jooble.ru - - joomla-monster.com - - josepvinaixa.com - - journalauto.com - - journalchretien.net - - journaldugamer.com - - journaldugeek.com - - joyent.com - - jplopsoft.idv.tw - - jpmwarrants.com.hk - - jqueryui.com - - jr-shikoku.co.jp - - jra.jp - - jsdpn.com - - jualakuntwitter.com - - judis.nic.in - - juegos.com - - juegosdechicas.com - - juegosdiarios.com - - juegosjuegos.com - - juggworld.com - - jujufeed.com - - julaibao.com - - julesjordan.com - - junefourth-20.net - - junglee.com - - junhongblog.info - - jurisway.org.br - - just-cool.net - - just.ro - - justfortinypeople.com - - justfreevpn.com - - justin.tv - - justonjuice.com - - justpaste.it - - justproxy.co.uk - - jyxf.net - - k12reader.com - - k178x.com - - k9safesearch.com - - kagyu.org - - kagyu.org.za - - kagyuoffice.org - - kagyuoffice.org.tw - - kaiyuan.de - - kakao.co.kr - - kakao.com - - kaleme.com - - kalenderwoche.net - - kan-be.com - - kanal5.com.mk - - kancb.com - - kangye.org - - kanshifang.com - - kanzhongguo.com.au - - kao165.info - - kaotic.com - - kapook.com - - kaqi.cc - - karakartal.com - - karmaloop.com - - karmapa.org - - kasikornbankgroup.com - - kat-proxy.org - - katedrala.cz - - kathimerini.gr - - kaufmich.com - - kaunsa.com - - kawanlah.com - - kayhanlondon.com - - kaze-travel.co.jp - - kblldy.info - - kcet.org - - kcome.org - - kebabstall.com - - kebrum.com - - kechara.com - - keepandshare.com - - keepawayfrommy.info - - keepmes.com - - keio.co.jp - - keithurban.net - - kempinski.com - - ken-studio.idv.tw - - kendincos.net - - kenengba.com - - kenming.idv.tw - - kentonline.co.uk - - kepard.com - - kerala.gov.in - - kerjanya.net - - keso.cn - - ketnooi.com - - khabdha.org - - khmer333.com - - khmusic.com.tw - - khou.com - - kickassproxy.com - - kickstarter.com - - kickyoutube.com - - kidlogger.net - - kikinote.com - - killwall.com - - kimy.com.tw - - king5.com - - kingbig.idv.tw - - kingcounty.gov - - kingdomsalvation.org - - kinghost.com - - kinghost.com.br - - kingstone.com.tw - - kinostar.uz - - kiproxy.com - - kir.jp - - kissbbao.cn - - kissyoutube.com - - kitagawa-pro.com - - kitchendesignsideasite.com - - kiwi.kz - - kk5.biz - - kkproxy.com - - kkproxy.pw - - kl.am - - klart.se - - kleinezeitung.at - - klick-tipp.com - - klickmembersproject.com.br - - klip.me - - km.ru - - km77.com - - kmtlbb.com - - knifehome.com.tw - - knmi.nl - - knowlarity.com - - knowledgerush.com - - knowyourmobile.com - - koaci.com - - kobe-np.co.jp - - kobe.idv.tw - - kochbar.de - - komixxx.com - - kompas.com - - kompasiana.com - - kompass.com - - komunitasfacebook.com - - koornk.com - - koozai.com - - korea-twitter.com - - korzik.net - - koxy.de - - kpop-instagram.com - - kpopstarz.com - - kproxy.com - - kproxy.in - - kprs.com - - kqvod.net - - kraftfuttermischwerk.de - - kreationjuice.com - - kristinandcory.com - - ksnews.com.tw - - ktrmr.com - - ktscc.idv.tw - - ktunnel.com - - ktunnel.net - - ktv.jp - - ktv52.com - - ku8m.com - - kuaibo444.com - - kuaihei.com - - kuaitv.net - - kuaizui.org - - kui.name - - kumao.cc - - kun.im - - kungfuboard.com - - kurzweilai.net - - kusc.org - - kuveytturk.com.tr - - kuyouwo.cn - - kwestiasmaku.com - - kwongwah.com.my - - kxlf.com - - kxlh.com - - ky3.com - - kyivpost.com - - kyobobook.co.kr - - kyohk.net - - kyoto-u.ac.jp - - kzeng.info - - l-anon.com - - la-forum.org - - labioguia.com - - labutaca.net - - ladbrokes.be - - ladbrokes.com - - ladbrokes.com.au - - lady-sonia.com - - ladyboygloryhole.com - - ladycheeky.com - - ladylike.gr - - lagometer.de - - lagranepoca.com - - laiba.com.au - - lakmeindia.com - - lalulalu.com - - lama.com.tw - - lamayeshe.com - - lamisstwitter.com - - lanacion.com.ar - - lancenet.com.br - - landofnod.com - - lang33.com - - langprism.com - - lankahotnews.info - - laola1.at - - laola1.tv - - laoyang.info - - lapagina.com.sv - - lapeyre.fr - - laps3.com - - laptopsdirect.co.uk - - laqingdan.net - - larazon.es - - larepubliquedespyrenees.fr - - largeporntube.com - - largexhamster.com - - lastfm.es - - lataayoutube.com - - latimes.com - - latinbabeslinks.com - - latribune.fr - - laurag.tv - - laverdad.com - - lavoixdunord.fr - - lavoratorio.it - - lavoricreativi.com - - lavoztx.com - - law.com - - layneglass.com - - lazada.com.ph - - lazymike.com - - lcads.ru - - ldmstudio.com - - le-dictionnaire.com - - lead.idv.tw - - leadferret.com - - leafly.com - - learntohackfacebook.com - - leeds.ac.uk - - leela.tv - - lefjsq.com - - lefora.com - - leggycash.com - - lematin.ch - - lemmonjuice.com - - lemonde.fr - - lemoniteur.fr - - lendingclub.com - - lens.hk - - lenzor.com - - leprogres.fr - - lesoir.be - - lester850.info - - letrasfacebook.com - - letsallhide.info - - letscorp.com - - letscorp.net - - lexilogos.com - - lezcuties.com - - lge.com - - lian33.com - - lianyue.net - - liaoti.net - - liaowangxizang.net - - liberal.org.hk - - libertytimes.com.tw - - libremercado.com - - lidecheng.com - - lidl-hellas.gr - - life.hu - - lifehacker.co.in - - lifehacker.com - - lifescript.com - - lightbox.com - - lighthouseteenseries.com - - lightingdirect.com - - liiga.fi - - liistfacebook.com - - likeddot.com - - lincolnfp.com - - lindaikejiblogspot.com - - line.me - - line25.com - - linglingfa.com - - lingyi.cc - - link666.info - - linkadeh.com - - linkedin.com - - linkedinjuice.com - - linkideo.com - - linkmefree.net - - linkmetube.com - - links.org.au - - linksalpha.com - - linkuswell.com - - linkworth.com - - linkxchanger.mobi - - linkyoutube.com - - linpie.com - - lipsy.co.uk - - lipuman.com - - liquida.it - - list4proxy.de - - listentoyoutube.com - - listotic.com - - listproxy.info - - littleshoot.org - - littlewebdirectory.com - - liuhanyu.com - - liujianshu.com - - live-proxy.com - - livechennai.com - - livejournal.com - - liveleak.com - - livescience.com - - livescore.co.kr - - livescore.in - - livesexvod.com - - livesmi.com - - livesports.pl - - livestation.com - - livevideo.com - - liychn.cn - - lizhidy.com - - llproxy.pw - - lmzj.net - - load.to - - localdomain.ws - - localhost.com - - localpresshk.com - - localstrike.net - - loggly.com - - logic-immo.be - - loginproxy.com - - logodesignjuice.com - - logogenie.net - - logsoku.com - - loiclemeur.com - - loja2.com.br - - lolclassic.com - - lollipop-network.com - - lomadee.com - - londonchinese.ca - - lonestarnaughtygirls.com - - longhair.hk - - longwarjournal.org - - lonny.com - - lookatgame.com - - loopnet.com - - looxy.com - - lopana.com.br - - lordoftube.com - - losandes.com.ar - - losrios.edu - - loupak.cz - - louvre.fr - - lovebakesgoodcakes.com - - loved.hk - - lrtys.com - - lsd.org.hk - - lsforum.net - - lsm.org - - lsmchinese.org - - ltn.com.tw - - ltshu.com - - lubetube.com - - lujunhong2or.com - - lujunhong2or.org - - luke54.org - - lukesblogspot.com - - lululu.cc - - lululuwang.com - - lunliys.com - - lupm.org - - lustful-girls.com - - lustful3dgirls.com - - lutataa.com - - luxebc.com - - luxuryestate.com - - luxurygirls.com - - lvinpress.com - - lvv2.com - - lyddkartcircuit.com - - lyfhk.net - - lyoness.tv - - lyrsense.com - - m3rf.com - - m8008.com - - m88a.com - - m88asia.com - - maarip.org - - mablet.com - - macau-slot.com - - macauslot.com - - macobserver.com - - macrovpn.com - - mad.com - - madad2.com - - madebony.com - - madsextube.com - - magazinemanager.com - - magicbricks.com - - magiran.com - - mahnor.com - - maichuntang.info - - maiio.net - - mail-archive.com - - mailhostbox.com - - mailp.in - - mailxmail.com - - mainlinkads.com - - mainprox.com - - makerstudios.com - - makure.com - - malavida.com - - malaysiabay.info - - maltaweathersite.com - - maltese.com - - mamisite.com - - manageryoutube.com - - managerzone.com - - manatelugu.in - - mangovpn.com - - maniash.com - - manicur4ik.ru - - manoto1.com - - manototv.com - - mans.edu.eg - - mansion.com - - mansionpoker.com - - mantan-web.jp - - manypicture.com - - maodaili.us - - maomaotlbb.com - - maomei.info - - mapsofindia.com - - marcamarca.com.tr - - marche.fr - - marcovasco.fr - - mardomak.org - - marguerite.su - - marianne.net - - marketforce.com - - marketron.com - - marketsandmarkets.com - - marxist.com - - marxists.org - - mashable.com - - masihalinejad.com - - masteraplayer.com - - mastercity.ru - - matchendirect.fr - - mathcourse.net - - mathland.idv.tw - - matomeantena.com - - matrixteens.com - - matsu.idv.tw - - matt1.net - - mature-gloryhole.com - - maturegnome.com - - maturevidstube.com - - maturexfuck.com - - maturexhamster.com - - maven.org - - maxicep.com - - maxidivx.com - - maxiocio.net - - maxpreps.com - - mayajo.com - - mbc.net - - mbusa.com - - mcdonalds.com - - mcreasite.com - - mct.gov.az - - md-t.org - - mdjunction.com - - mecze24.pl - - mediafire.com - - mediafreakcity.com - - mediayou.net - - medicaldaily.com - - medicamentos.com.mx - - medicare.gov - - medyatwitter.com - - meemi.com - - meetic.com - - meetic.es - - meetic.it - - mefeedia.com - - mega-xhamster.com - - megabyet.net - - megaindex.tv - - megamidia.com.br - - megaporn.com - - megaproxy.com - - megaproxy.com.ar - - meimeidy.com - - meineihan.com - - meinvshipin.net - - mejorproxy.com - - melimazhabi.com - - melissadata.com - - membuatfacebook.com - - memehk.com - - memrijttm.org - - menki.idv.tw - - menover30.com - - mensagenscomamor.com - - mentalfloss.com - - mercyprophet.org - - meridiano.com.ve - - merit-times.com.tw - - meriview.in - - merlion.com - - mesotw.com - - met-art.com - - meta.ua - - metacafe.com - - metacritic.com - - metaffiliation.com - - metart1.com - - metartz.com - - meteo.cat - - meteoconsult.fr - - meteomedia.com - - metifar.com - - metric-conversions.org - - metropoli.com - - metroradio.com.hk - - metroui.org.ua - - metservice.com - - meyou.jp - - mfacebook.com - - mfbiz.com - - mforos.com - - mgoon.com - - mgstage.com - - mh700.cf - - mha.nic.in - - mhradio.org - - mibrujula.com - - midiamax.com - - midilibre.fr - - midnightfever.com - - mightydeals.com - - mihanblog.com - - mihanmarket.com - - mihk.hk - - mihr.com - - milanotoday.it - - militaryfactory.com - - millipiyango.gov.tr - - milsurps.com - - miltt.com - - mimivip.com - - mindandlife.org - - mindspark.com - - minghui-school.org - - minghui.de - - minghui.org - - mingjinglishi.com - - mingjingnews.com - - mingpao.com - - mingpaocanada.com - - mingpaofun.com - - mingpaomonthly.com - - mingpaonews.com - - mingpaony.com - - mingpaosf.com - - mingpaotor.com - - mingpaovan.com - - mingshengbao.com - - mini189.com - - mininova.org - - minisizebikini.com - - ministrybooks.org - - minkchan.com - - minutebuzz.com - - minutodigital.com - - minzhuhua.net - - minzhuzhongguo.org - - miqiqvod.com - - mirrorbooks.com - - misionescuatro.com - - miss-no1.com - - misty-web.com - - mitbbs.ca - - mitbbs.co.nz - - mitbbs.co.uk - - mitbbs.com - - mitbbs.org - - mitbbsau.com - - mitbbshk.com - - mitbbsjp.com - - mitbbssg.com - - mitbbstw.com - - mitmproxy.org - - mixero.com - - mixlr.com - - mixpod.com - - mixturecloud.com - - mixx.com - - mixxxx.com - - mk.ru - - mk5000.com - - mktmobi.com - - mlcool.com - - mm-11.com - - mm-cg.com - - mm6yt.com - - mmcoo.cn - - mmdays.com - - mmmca.com - - mobile01.com - - mobilelaby.com - - mobilesmovie.in - - mobypicture.com - - mobzo.net - - mockblock.com - - mocovideo.jp - - model-tokyo.com - - modells.com - - moe.gov.my - - moegirl.org - - mofosex.com - - moins-depenser.com - - mojang.com - - mojim.com - - mojtv.hr - - moka9.com - - molihua.org - - mommyslittlecorner.com - - momo-d.jp - - momon-ga.com - - momsexclipz.com - - momtubeclipz.com - - mondebarras.fr - - mondemp3.com - - money-link.com.tw - - moneymakergroup.com - - mongodb.org - - monitorinvest.ru - - monoprix.fr - - monsterproxy.info - - montrealgazette.com - - mooo.com - - moosejaw.com - - morbell.com - - moria.co.nz - - morningstar.com - - morphium.info - - mostfastproxy.org - - mothqfan.com - - moto.it - - motor4ik.ru - - motorionline.com - - motorlife.it - - mousebreaker.com - - movie-jamrock.com - - movie2kproxy.com - - movie4k.to - - movie4kproxy.com - - movie8k.to - - moviegalleri.net - - movietitan.com - - movistar.com.ve - - moztw.org - - mp3buscador.com - - mp3days.com - - mp3juices.com - - mp3okay.com - - mp3qu.com - - mp3rhino.com - - mp3skull.com - - mp3skull.tv - - mp3strana.com - - mp3truck.net - - mp3ye.eu - - mp4movies.info - - mpggalaxy.com - - mpinews.com - - mprnews.org - - mr7.ru - - mrbrowser.com - - mrgreen.com - - mrstiff.com - - mrunblock.com - - ms881.com - - msguancha.com - - mshcdn.com - - msi.com - - msk.su - - msn.com - - msn.com.tw - - mt.gov.br - - mtm.or.jp - - mtnldelhi.in - - mtvav.com - - muaban.net - - muambator.com.br - - muchosucko.com - - mulhak.com - - mullvad.net - - multiproxy.org - - multiupload.com - - mummysgold.com - - mundodesconocido.es - - mundodomarketing.com.br - - mundosexanuncio.com - - mundotoro.com - - murmur.tw - - muryouav.net - - muselinks.co.jp - - musicade.net - - musictimes.com - - musicvideomp3.com - - musik-videos.dk - - musimundo.com - - muslimvideo.com - - muslm.org - - mustaqim.net - - muzofon.com - - mwolk.com - - my-formosa.com - - my-personaltrainer.it - - my-private-network.co.uk - - my-proxy.com - - my1tube.com - - my3xxx.com - - my903.com - - myapp.com.tw - - myaudiocast.com - - myav.com.tw - - mybabyprox.info - - mybdsmvideos.net - - mybestvpn.com - - mybet.com - - myblog.it - - mybnb.tw - - myca168.com - - mychat.to - - mychinamyhome.com - - mychinanews.com - - mycloud.idv.tw - - mycould.com - - mydati.com - - mydlink.com - - myeasytv.com - - myex.com - - myfashionjuice.com - - myforum.com.hk - - myforum.com.uk - - myfreepaysite.com - - myfreshnet.com - - myhardphotos.tv - - myhhg.org - - myhotsite.net - - myip.ms - - myip.net - - myiphide.com - - mylittleblogspot.com - - mymailsrvr.com - - mymaji.com - - mymovies.it - - mypagerank.net - - mypass.de - - myproxysite.org - - myrecipes.com - - myretrotube.com - - mysinablog.com - - mysoft.idv.tw - - myspace.com - - myspaceunblockit.com - - myspaceunlock.com - - mytedata.net - - myvido1.com - - myvnc.com - - myvouchercodes.co.uk - - mywebproxy.asia - - mywebsearch.com - - mywendysmusic.com - - mz-web.de - - nabble.com - - nailideasite.com - - najlepsze.net - - naked-nude.com - - nakido.com - - naluone.biz - - naluone.net - - namestation.com - - nanoproxy.com - - nanoproxy.de - - nanyang.com - - nanyang.com.my - - nanyangpost.com - - nanzao.com - - naol.ca - - nariman.me - - nat.gov.tw - - natado.com - - nationwide.com - - natlconservative.com - - naturallycurly.com - - nature.com - - naughtyamerica.com - - naughtytube.net - - nayaritenlinea.mx - - nbcwashington.com - - nccwatch.org.tw - - nch.com.tw - - ncn.org - - ncol.com - - ndr.de - - necclassicmotorshow.com - - ned.org - - nediyor.com - - neighborhoodr.com - - neixiong.com - - nelnet.net - - neolee.cn - - nerfnow.com - - net-a-porter.com - - net.hr - - netbirds.com - - netfirms.com - - netherlandsbay.info - - neti.ee - - netlog.com - - netspend.com - - network54.com - - networkedblogs.com - - networkview.ru - - netxee.com - - neutrogena.com - - nevernumb.com - - new-akiba.com - - new-xhamster.com - - newcenturymc.com - - newchen.com - - newfreeproxy.com - - newgrounds.com - - newipnow.com - - newkaliningrad.ru - - newlandmagazine.com.au - - newnews.ca - - newproxy.pw - - newproxylist.net - - newrichmond-news.com - - news-medical.net - - news-xhamster.com - - news.at - - news1.kr - - news100.com.tw - - news247.gr - - news4andhra.com - - news4jax.com - - news520.idv.tw - - newsancai.com - - newsarama.com - - newscn.org - - newsdh.com - - newsextube.org - - newsit.gr - - newsiteproxy.info - - newspeak.cc - - newspickup.com - - newsr.in - - newstapa.org - - newstarnet.com - - newstube.ru - - newstwitter.com - - newtaiwan.com.tw - - newtalk.tw - - newunblocker.com - - next11.co.jp - - nextcontent.pl - - nextmedia.com - - nexttv.com.tw - - nf.id.au - - nfxxoo.com - - nhacso.net - - nhra.com - - niceyoungteens.com - - nichegalz.com - - nicotwitter.com - - nicovideo.jp - - nicoviewer.net - - niedziela.nl - - nightwalker.co.jp - - nikon.com - - nilongdao.com.cn - - nimenhuuto.com - - ning.com - - ninisite.com - - ninjabrowse.com - - ninjacloak.ca - - ninjacloakproxy.com - - ninjaproxy.eu - - ninjaproxy.info - - ninkipal.com - - njmaq.com - - nkongjian.com - - nlb.si - - nlfreevpn.com - - nlog.cc - - nlproxy.ru - - nn-nymphets.com - - nn2014.com - - nnlian.info - - nnproxy.pw - - no-ip.org - - noblecasino.com - - nodesnoop.com - - nol.hu - - nolags.pl - - nominet.org.uk - - nomorerack.com - - nonton88.com - - nooz.gr - - norauto.fr - - nordstrom.com - - northamericanproxy.com - - northjersey.com - - norwaybay.info - - nostringsattached.com - - notaelpais.com - - notices-pdf.com - - noticias.info - - noticiasrcn.com - - noticierodigital.com - - notjustok.com - - nottinghampost.com - - novedadesfacebook.com - - novelasfacebook.com - - novostimira.biz - - nownews.com - - nowtorrents.com - - noypf.com - - npa.go.jp - - npg.idv.tw - - nps.gov - - nqma.net - - nquran.com - - nrk.no - - nsc.gov.tw - - nsfwyoutube.com - - nstarikov.ru - - nsteens.org - - ntd.tv - - ntdtv.com - - ntdtv.jp - - ntdtv.ru - - ntdtvla.com - - ntu.edu.tw - - nu.nl - - nubelo.com - - nubiles.net - - nubileworld.com - - nude.hu - - nudegirls.pro - - nudetube.com - - nudography.com - - nuovomegavideo.com - - nutech.nl - - nuvid.com - - nviewer.mobi - - nwzonline.de - - nycgo.com - - nydus.ca - - nykaa.com - - nylon-angel.com - - nylonstockingsonline.com - - nytimes.com - - nyxcosmetics.fr - - nzchinese.net.nz - - o2youtube.com - - o4e.pw - - oauth.net - - oberon-media.com - - obutu.com - - ocaspro.com - - occupier.hk - - ocks.org - - oclp.hk - - ocreampies.com - - octane.tv - - octanevpn.com - - ocweekly.com - - ocwencustomers.com - - oeker.net - - oem.com.mx - - officeholdings.co.uk - - officer.com - - offshoreip.com - - ogaoga.org - - ogglist.com - - oglaf.com - - ogli.org - - ogp.me - - ohix.com - - ohjapanporn.com - - ohtuleht.ee - - oikos.com.tw - - oiktv.com - - ok8666.com - - okayfreedom.com - - okezone.com - - okip.info - - okk.tw - - okmall.tw - - okproxy.com - - older-beauty.com - - oldi.ru - - oldxy.info - - oliveoilsega.idv.tw - - oloblogger.com - - olx.com.ng - - olx.com.sv - - olympicwatch.org - - om.net - - omapass.com - - omegawatches.com.tw - - omgubuntu.co.uk - - omlogistics.co.in - - omnitalk.com - - omroepbrabant.nl - - omsk.su - - omy.sg - - on.cc - - onegaydaddy.com - - onego.ru - - onemedical.com - - onenewspage.com - - onepieceofbleach.com - - oneyoutube.com - - oninstagram.com - - onisep.fr - - onjuice.com - - online-anonymizer.com - - online-casino.de - - onlineaccess1.com - - onlineandhrabank.net.in - - onlineanonymizer.com - - onlinebank.com - - onlinebizguide.net - - onlinecha.com - - onlinefilmx.ru - - onlineinstagram.com - - onlineipchanger.com - - onlinematuretube.com - - onlinemediagroupllc.com - - onlineproxy.co.uk - - onlineproxy.us - - onlineproxyfree.com - - onlinevideoconverter.com - - onlineyoutube.com - - only-m-youtube.com - - onlybestsex.com - - onlyjizz.com - - onlylady.cn - - onmoon.com - - ons22.com - - ons96.com - - onthehunt.com - - ontrac.com - - oo.com.au - - ooo-sex.com - - oopsforum.com - - op.fi - - opel.de - - open-websites.us - - open.com.hk - - opendemocracy.net - - opendoors.nl - - opendoors.org.au - - openinkpot.org - - openleaks.org - - opennet.ru - - openproxy.co.uk - - openrice.com - - opensurf.info - - openthis.pl - - openvpn.net - - opera-mini.net - - opera.com - - opm.gov - - optmd.com - - opview.com.tw - - orakul.ua - - orange.com - - oranges.idv.tw - - orchidbbs.com - - orgasm.com - - orgfree.com - - orientalbutts.com - - orientaldaily.com.my - - orkut.com - - oroxy.com - - orzdream.com - - osikko.jp - - osyan.net - - otnnetwork.net - - ouest-france.fr - - oulove.org - - oup.com - - our-twitter.com - - ourgames.ru - - ourproxy.org - - oursogo.com - - oursteps.com.au - - outdoorlife.com - - outerlandssf.com - - ouvalalgerie.com - - ovaciondigital.com.uy - - over-blog.com - - over-time.idv.tw - - overclockers.com.au - - overplay.net - - ovh.ie - - ovh.it - - ovi.com - - ow.ly - - owind.com - - oxicams.com - - oyax.com - - oyota.net - - ozchinese.com - - ozyoyo.com - - p12p.com - - pacificpoker.com - - packetix.net - - page2rss.com - - pageuppeople.com - - paginegialle.it - - paid2twitter.com - - paid2youtube.com - - painless.idv.tw - - paipan-gazo.com - - paisdelosjuegos.es - - pakfacebook.com - - pakistan.tv - - pakistanjobsbank.com - - pakistanproxy.com - - pakproxy.com - - palacemoon.com - - palakuan.org - - palermo.edu - - palm.com - - palmislife.com - - pandora.tv - - pandoravote.net - - panluan.net - - panoramio.com - - pantyfixation.com - - pao-pao.net - - pao77.com - - pap.fr - - papaproxy.com - - papaproxy.net - - paperlesspost.com - - papersizes.org - - papy.co.jp - - parade.com - - parcelforce.com - - parsiteb.com - - partnercash.com - - partycasino.com - - partypoker.com - - passadoproxy.com - - passion.com - - passionfruitads.com - - passiontimes.hk - - passkey.com - - pastebin.com - - pastie.org - - path.com - - patheos.com - - pathtosharepoint.com - - patrika.com - - pavietnam.vn - - pay-click.ru - - paypal.com - - paypalobjects.com - - payrollapp2.com - - pbase.com - - pbxes.com - - pcanalysis.net - - pcappspot.com - - pcdiscuss.com - - pcdvd.com.tw - - pchome.com.tw - - pcij.org - - pcnet.idv.tw - - pcreview.co.uk - - pcsc.com.tw - - pcso.gov.ph - - pct.org.tw - - pcvector.net - - pdf2jpg.net - - pdproxy.com - - peacefire.org - - peacehall.com - - peakdiscountmattress.com - - pearsoncmg.com - - pedidosya.com.ar - - peeasian.com - - peeping-holes.com - - peerproxy.com - - pejwanyoutube.com - - pekingduck.org - - peliculas21.com - - peliculasdeyoutube.com - - peliculasenyoutube.com - - peliculasland.com - - pelismaseries.com - - penchinese.net - - penchinese.org - - penisbot.com - - pentalogic.net - - penthouse.com - - penthousebabesworld.com - - people.bg - - peoplenews.tw - - peoplepets.com - - peopo.org - - percy.in - - perfectgirls.net - - perfectvpn.net - - perfektegirls.com - - perfspot.com - - perniaspopupshop.com - - persecution.net - - persianfacebook.com - - persiankitty.com - - pet01.tw - - petardas-youtube.com - - petardashd.com - - petfilm.biz - - pewhispanic.org - - pewinternet.org - - pewresearch.org - - pewsocialtrends.org - - ph158.com - - ph84.idv.tw - - phandangkhoa.com - - phapluan.org - - phatograph.com - - phayul.com - - phica.net - - phillynews.com - - phim19.com - - phimsexvip.com - - phimvideo.org - - phonegap.com - - phothutaw.com - - photo-aks.com - - photobox.com - - photogals.com - - php-proxy.net - - php5.idv.tw - - phpbido.com - - phpmyproxy.com - - phree-porn.com - - phyworld.idv.tw - - pib24.com - - picdn.net - - picidae.net - - picsmaster.net - - pidown.com - - piecesetpneus.com - - pign.net - - pikchur.com - - pilio.idv.tw - - pilotmoon.com - - pimptubed.com - - pin6.com - - ping.fm - - pingtest.net - - pinproxy.com - - pintang.info - - pinupfiles.com - - pipeporntube.com - - pipeproxy.com - - piposay.com - - pippits.com - - piraattilahti.org - - piratbit.net - - piratebayproxy.co - - piratebayproxy.co.uk - - piratebrowser.com - - piraterfacebook.com - - pirelli.com - - piring.com - - piss.jp - - pixartprinting.es - - pixelbuddha.net - - pixnet.in - - pixnet.net - - pk.com - - pkobp.pl - - pkspiyungan.org - - pkt.pl - - planetsuzy.org - - planproxy.com - - plant-seeds.idv.tw - - plantillas-blogger-blogspot.com - - platinumhideip.com - - platum.kr - - playboy.ro - - player.pl - - playforceone.com - - playfun.mobi - - playlover.net - - plays.com.tw - - pliage-serviette-papier.info - - plixi.com - - plm.org.hk - - plndr.com - - plunder.com - - plurk.com - - plus.es - - plus28.com - - plusbb.com - - pmates.com - - pmi.it - - pocketcalculatorshow.com - - podcastblaster.com - - pogledaj.name - - point.md - - pointblank.ru - - pointstreak.com - - pokerstars.com - - pokerstars.eu - - pokerstars.net - - pokerstrategy.com - - policja.gov.pl - - politico.com - - politobzor.net - - pollstar.com - - polygamia.pl - - polysolve.com - - poonfarm.com - - popnexsus.com - - popphoto.com - - popular-youtube.com - - popyard.com - - popyard.org - - porn-xhamster.com - - porn.com - - porn2.com - - porn99.net - - pornbase.org - - pornerbros.com - - pornhome.com - - pornhost.com - - pornhub.com - - pornhub.com.bz - - pornhubking.com - - pornhublive.com - - pornicom.com - - pornoshara.tv - - pornoxo.com - - pornpin.com - - pornplays.com - - pornrapidshare.com - - pornstarclub.com - - porntitan.com - - porntube.com - - porntubenews.com - - porntubexhamster.com - - pornvisit.com - - porsh.idv.tw - - portadasparafacebook.com - - portoseguro.com.br - - posb.com.sg - - posestacio.com.br - - post852.com - - postads24.com - - posterous.com - - postmoney.com.br - - postonfacebook.com - - pourquoidocteur.fr - - povpn.org - - povpn3.com - - power.com - - powermapper.com - - powerpointninja.com - - poxy.pl - - poznavatelnoe.tv - - ppproxy.pw - - ppss.kr - - pr.gov - - prabhatkhabar.com - - prasinanea.gr - - pravda.ru - - predpriemach.com - - president.az - - president.gov.tw - - prestigecasino.com - - prettyvirgin.com - - prettywifes.com - - previdencia.gov.br - - price.ua - - priceminister.com - - pricetravel.com.mx - - pridesites.com - - primeporntube.com - - primicia.com.ve - - prisoneralert.com - - pritunl.com - - private-internet.info - - privatebrowsing.info - - privateinternetaccess.com - - privateproxyreviews.com - - privateserver.nu - - privatetunnel.com - - privatevoyeur.com - - privatevpn.com - - pro-4u.com - - pro-unblock.com - - proceso.com.mx - - profittask.com - - programastwitter.com - - programmableweb.com - - projecth.us - - proksiak.pl - - proksyfree.com - - prolink.pl - - prom.ua - - promopro.com - - pron.com - - pronosticos.gob.mx - - proproxy.me - - prosper.com - - protectmyid.com - - protectproxy.com - - protv.ro - - prounlock.org - - proverbia.net - - provideocoalition.com - - provinz.bz.it - - prowang.idv.tw - - prox.pw - - proxay.co.uk - - proxery.com - - proxfly.com - - proxfree.com - - proxfree.pk - - proxifier.com - - proxify.co.uk - - proxify.com - - proxite.me - - proxite.net - - proxite.org - - proxite.us - - proxlet.com - - proxmyass.com - - proxpn.com - - proxtik.com - - proxurf.com - - proxxy.co - - proxy-2014.com - - proxy-bg.com - - proxy-bypass.com - - proxy-ip-list.com - - proxy-online.net - - proxy-romania.info - - proxy-server.at - - proxy-service.com.de - - proxy-service.de - - proxy-site.com.de - - proxy-top.com - - proxy-unlock.com - - proxy.al - - proxy.com.de - - proxy.org - - proxy.yt - - proxy01.com - - proxy14.com - - proxy2014.net - - proxy4free.cf - - proxy4free.com - - proxy4free.pl - - proxy4usa.com - - proxy4youtube.com - - proxy4youtube.info - - proxy8.asia - - proxyanonimo.es - - proxyanonymizer.net - - proxyapp.org - - proxybay.info - - proxybay.nl - - proxybig.net - - proxybitcoin.com - - proxyboost.net - - proxybrowse.net - - proxybrowser.org - - proxybrowseronline.com - - proxybrowsing.com - - proxybutler.co.uk - - proxybutton.com - - proxycab.com - - proxychina.net - - proxyclube.org - - proxycn.cn - - proxycrime.com - - proxydada.com - - proxydogg.com - - proxyfor.eu - - proxyforplay.com - - proxyforyoutube.net - - proxyfounder.com - - proxyfoxy.com - - proxyfree.org - - proxygizlen.com - - proxygogo.info - - proxyguru.info - - proxyhash.info - - proxyhub.eu - - proxykickass.com - - proxykorea.info - - proxylist.org.uk - - proxylist.se - - proxylisting.org - - proxylistpro.co.uk - - proxylistpro.com - - proxylists.me - - proxylisty.com - - proxymesh.com - - proxymexico.com - - proxymus.de - - proxynoid.com - - proxyok.com - - proxyonline.ro - - proxyoo.com - - proxypk.com - - proxypronto.com - - proxypy.net - - proxypy.org - - proxyregister.com - - proxyroad.com - - proxys.pw - - proxysan.info - - proxysandy.com - - proxysensation.com - - proxyserver.asia - - proxyserver.com - - proxyserver.pk - - proxyserver.pw - - proxyshield.org - - proxysite.com - - proxysite.pw - - proxysite.ws - - proxysitelist.org - - proxysites.com - - proxysites.in - - proxysites.net - - proxysix.com - - proxysmurf.nl - - proxysnel.nl - - proxyspain.com - - proxysslunblocker.com - - proxystreaming.com - - proxysubmit.com - - proxysurfing.org - - proxysurfs.com - - proxytu.com - - proxytunnel.in - - proxytunnel.net - - proxyturbo.com - - proxyunblocker.org - - proxyusa.org - - proxyvideos.com - - proxyvpn.eu - - proxyweb.com.es - - proxyweb.net - - proxywebproxy.info - - proxywebsite.co.uk - - proxywebsite.org - - proxywebsite.us - - proxyzan.info - - prudentman.idv.tw - - prweek.com - - prx.im - - prxme.com - - ps3youtube.com - - pse100i.idv.tw - - psi.gov.sg - - psu.ac.th - - psychcentral.com - - psychologies.ru - - ptitchef.com - - pts.org.tw - - ptt.cc - - ptt.gov.tr - - pu.edu.pk - - public.lu - - publisuites.com - - publix.com - - pubu.com.tw - - puffinbrowser.com - - puffstore.com - - pujiahh.com - - pulsepoint.com - - punishtube.com - - pureandsexy.org - - purecfnm.com - - pureinsight.org - - purelovers.com - - purepeople.com.br - - purevpn.com - - purifymind.com - - pushpsavera.com - - pushtraffic.net - - pussy.org - - putaz.com - - putihome.org - - putlocker.com - - putproxy.com - - puuko.com - - pwnyoutube.com - - px.co.nl - - pxaa.com - - pypna.com - - pyramydair.com - - python.com - - python.com.tw - - q22w.com - - qanote.com - - qgairsoft.com.br - - qi41.com - - qiangb.com - - qidian.ca - - qienkuen.org - - qilumovie.com - - qinmin8.com - - qiqisea.com - - qire123.com - - qisexing.com - - qisuu.com - - qiu.la - - qiwen.lu - - qkshare.com - - qmzdd.com - - qoos.com - - qooza.hk - - qq-av.com - - qq.co.za - - qqproxy.pw - - qqq321.com - - qruq.com - - quackit.com - - queantube.com - - quechoisir.org - - queermenow.net - - quickprox.com - - quickproxy.co.uk - - quietyoutube.com - - qukandy.com - - qvc.de - - qvcuk.com - - qvod123.net - - qvod6.net - - qvodcd.com - - qvodhe.com - - qvodzy.org - - qweyy.com - - qwqshow.com - - qx.net - - r2sa.net - - raccontimilu.com - - racingvpn.com - - rada.gov.ua - - radaris.com - - radioaustralia.net.au - - radiofarda.com - - radiotime.com - - radiozamaneh.com - - radyoturkistan.com - - rael.org - - raidcall.com - - raidcall.com.br - - raidcall.com.ru - - raidcall.com.tw - - raiders.com - - raidtalk.com.tw - - raiffeisenpolbank.com - - rajanews.com - - rajayoutube.com - - rakuten-bank.co.jp - - ramblingsofmama.com - - randyblue.com - - rantenna.net - - raooo.com - - rapbull.net - - rapeforced.com - - rapidproxy.org - - rapidproxy.us - - rapidsharedata.com - - rappler.com - - raqq.com - - rategf.com - - razrabot4ik.ru - - rc-fans88.com - - rcinet.ca - - reachlocal.net - - read100.com - - readersdigest.de - - readersdigestdirect.com.au - - readingtimes.com.tw - - readmoo.com - - readnews.gr - - readtiger.com - - readydown.com - - realclearsports.com - - realestate.com - - realhomesex.net - - reality.hk - - realmadrid.com - - realmadryt.pl - - realmatureswingers.com - - realmaturetube.com - - realraptalk.com - - realsexpass.com - - realsimple.com - - realspeed.info - - recetasgratis.net - - recettes.de - - recipdonor.com - - reconnectiontaiwan.tw - - recordhistory.org - - recovery.org.tw - - redcrackle.com - - reddit.com - - redian.today - - redlightcenter.com - - redsocialfacebook.com - - redtube.com - - redtube.com.br - - redtube.com.es - - redtube.net.pl - - redtube.org.pl - - reed.co.uk - - reelzhot.com - - referenceur.be - - referer.us - - reg.ru - - regional-finder.com - - reibert.info - - reifefrauen.com - - relaxbbs.com - - relevance.com - - reliancedigital.in - - reliancenetconnect.co.in - - remax.com - - remontka.pro - - removefilters.net - - renfe.es - - renminbao.com - - renrenpeng.com - - rentalcars.com - - renyurenquan.org - - replayyoutube.com - - rerouted.org - - rescueme.org - - response.jp - - retranstwitter.com - - retweetrank.com - - reuters.com - - reviewcentre.com - - reviveourhearts.com - - revleft.com - - revver.com - - rexoss.com - - rfa.org - - rfachina.com - - rfamobile.org - - rfaweb.org - - rferl.org - - rfi.fr - - rgfacebook.com - - rghost.ru - - rhcloud.com - - ri86.com - - rib100.com - - ribiaozi.info - - ricardoeletro.com.br - - richmediagallery.com - - rigpa.org - - rijnmond.nl - - riku.me - - rileyguide.com - - ripley.com.pe - - rivegauche.ru - - rlwlw.com - - rncyoutube.com - - rnw.nl - - roadbikereview.com - - roadrunner.com - - roadshow.hk - - rockmelt.com - - rod.idv.tw - - romanandreg.com - - roodo.com - - roogen.com - - roozonline.com - - rosi.mn - - rosimn.com - - rostelecom.ru - - rotten.com - - roundcube.net - - routeserver.se - - royallepage.ca - - rozetka.com.ua - - rozhlas.cz - - rozryfka.pl - - rozzlobenimuzi.com - - rpp.com.pe - - rrbald.gov.in - - rrsoso.com - - rryoutube.com - - rsb.ru - - rsf-chinese.org - - rsf.org - - rssing.com - - rssmeme.com - - rthk.hk - - rthk.org.hk - - rti.org.tw - - rtysm.net - - ruanyifeng.com - - rubias19.com - - rubyfortune.com - - rulertube.com - - runningwarehouse.com - - ruporn.tv - - ruscams.com - - rushbee.com - - russianproxy.org - - rusxhamster.com - - rutor.org - - rutwitter.com - - ruuh.com - - ruv.is - - ruvr.ru - - ruyiseek.com - - rxhj.net - - rxproxy.com - - ryerson.ca - - s-dragon.org - - s135.com - - s8soso.com - - sacitaslan.com - - safariproxy.com - - safenfree.com - - safeproxy.org - - safervpn.com - - safeunblock.com - - sageone.com - - sagepay.com - - saiq.me - - saishuu-hentai.net - - sakuralive.com - - salamnews.org - - salesforceliveagent.com - - salir.com - - salonmicroentreprises.com - - salvation.org.hk - - samair.ru - - samanyoluhaber.com - - sambamediasl.com - - sancadilla.net - - sanjitu.com - - sankeibiz.jp - - sanmin.com.tw - - santabanta.com - - sanwapub.com - - sao47.com - - sao92.com - - saponeworld.com - - sasa123.com - - sat24.com - - sat4the.co.uk - - saude.gov.br - - saudi-twiter.tk - - saudiarabiabay.info - - saveinter.net - - savemyrupee.com - - savetibet.org - - savetibet.ru - - savevid.com - - saveyoutube.com - - sawmillcreek.org - - say-move.org - - sayproxy.info - - sbo128.com - - sbo222.com - - sc.gov.br - - scamaudit.com - - scambook.com - - scasino.com - - sccc1.com - - schema.org - - school-proxy.org - - school-unblock.com - - school-unblock.net - - schoolproxy.co - - schoolproxy.info - - schoolproxy.pk - - schooltunnel.net - - schuh.co.uk - - sciencesetavenir.fr - - scirp.org - - sclub.tw - - scmp.com - - scmpchinese.com - - scopesandammo.com - - scrapy.org - - screen4u.net - - scribd.com - - scriptingvideos.info - - scruzall.com - - sctimesmedia.com - - sctv31.com - - sdbluepoint.com - - se-duc-tive.com - - se94se.org - - se9678.com - - se999se.com - - seahawks.com - - search-mp3.com - - search.com - - search4passion.com - - searchblogspot.com - - searchgeek.com - - searchinstagram.com - - searchtruth.com - - secret.ly - - secretchina.com - - secretosdefacebook.com - - secretsline.biz - - secretsofthefed.com - - secsurfing.com - - sectur.gob.mx - - securebox.asia - - securefor.com - - securepro.asia - - secureserver.net - - securesurf.pw - - security.cl - - securityinabox.org - - securitykiss.com - - seekbabes.com - - seekpart.com - - seektoexplore.com - - segou456.info - - seguidoresinstagram.com - - segye.com - - seh1.com - - seh5.com - - seh7.com - - seikatsuzacca.com - - selang.ca - - selang33.com - - selaoer.com - - selectornews.com - - selekweb.com - - semaomi.com - - semonk.info - - sendgrid.net - - sendingcn.com - - sendspace.com - - seniorsoulmates.com - - sensortower.com - - sensualgirls.org - - senzuritv.com - - seocheki.net - - seopanda.net - - seosphere.com - - seovalley.com - - sequoiacap.com - - seraph.me - - serveblog.net - - serveirc.com - - servepics.com - - servermania.com - - servermatrix.org - - service.gov.uk - - ses999.com - - sesawe.org - - sese9797.com - - seseaa.com - - seserenti.com - - setty.com.tw - - sevenload.com - - seventeenbabes.com - - sex-11.com - - sex-sms-contacts.com - - sex.com - - sex169.org - - sex3.com - - sex520.net - - sex8.cc - - sexandsubmission.com - - sexbot.com - - sexdelivery.com - - sexdougablog77fc2.com - - sexfortv.com - - sexgamepark.com - - sexgo2av.com - - sexgoesmobile.com - - sexhu.com - - sexhuang.com - - sexinsex.net - - sexjapanporn.com - - sexmm520.com - - sexmoney.com - - sexnhanh.com - - sexoteric.com - - sexpreviews.eu - - sexstarsonly.com - - sextracker.com - - sextubeset.com - - sextvx.com - - sexualhentai.net - - sexxse.com - - sexy-babe-pics.com - - sexy-lingerie.ws - - sexy.com - - sexyandfunny.com - - sexyfuckgames.com - - seyedmojtaba-vahedi.blogspot.co.uk - - sf558.com - - sfacebook.com - - sfileydy.com - - sfora.pl - - sgblogs.com - - sgchinese.net - - sgcpanel.com - - sgttt.com - - shablol.com - - shabnamnews.com - - shacknews.com - - shadowsocks.org - - shahamat-english.com - - shahamat-movie.com - - shambhalasun.com - - shangfang.org - - shaoka.com - - shape.in.th - - shapeservices.net - - sharebee.com - - sharpdaily.com.hk - - sharpdaily.hk - - shaunthesheep.com - - shavedpussy.pro - - shayujsq.org - - shefacebook.com - - sheikyermami.com - - sheldonsfans.com - - shelf3d.com - - shellfire.de - - shemale-asia.com - - shemaletimpo.com - - shenghuonet.com - - shenyun.com - - shenyunperformingarts.org - - sherdog.com - - shiatv.net - - shiftdelete.net - - shinyi-aikido.idv.tw - - shiraxxx.com - - shireyishunjian.com - - shireyishunjian.org - - shistlbb.com - - shitaotv.org - - shizhao.org - - shock-news.net - - shooshtime.com - - shootq.com - - shop.by - - shop2000.com.tw - - shopcade.com - - shopping.com - - shopping.com.bn - - shopping.com.ua - - shorthairstyleideasite.com - - shoutussalam.com - - showthis.pl - - showtime.jp - - shqiplive.info - - shuangtv.net - - shulou.com - - shutterstock.com - - shvoong.com - - shwchurch3.com - - siakapkeli.com - - siamsport.co.th - - siks.com - - silkbook.com - - silverfacebook.com - - silverstripe.org - - sima-land.ru - - simboli-facebook.com - - simbolosparafacebook.com - - simbolostwitter.com - - similsites.com - - sina.com - - sina.com.hk - - sina.com.tw - - singaporebay.info - - singaporepools.com.sg - - singtao.ca - - singtao.com - - singtao.com.au - - singtaousa.com - - singyoutube.com - - sinica.edu.tw - - sinoants.com - - sinocism.com - - sinonet.ca - - sinopitt.info - - sinoquebec.com - - sis001.com - - sis001.us - - sis8.com - - sita.aero - - site2unblock.com - - siteblocked.org - - sitebro.tw - - siteexplorer.info - - sitefile.org - - siteget.net - - sitemanpro.com - - sitenable.com - - skimtube.com - - skinnytaste.com - - sky.com.br - - skybet.com - - skykiwi.com - - skype.com - - skyscanner.com.br - - skyscanner.fr - - skyscanner.nl - - skyword.com - - skyzone.com - - slandr.net - - sldao.us - - slickamericans.com - - slickvpn.com - - slideshare.net - - slime.com.tw - - slinkset.com - - slipstick.com - - sloggi.com - - sloppytube.com - - slutload.com - - slutroulette.com - - slutsofinstagram.com - - slysoft.com - - slyuser.com - - smaato.com - - smartusa.com - - smashingreader.com - - smile.co.uk - - smithmicro.com - - smlm.info - - smokeproxy.com - - smude.edu.in - - smxinling.com - - snakecastle.com - - snapdealmail.in - - snaptu.com - - sneakzorz.com - - snipurl.com - - snob.ru - - snooper.co.uk - - snowproxy.com - - so-ga.net - - so-net.net.tw - - so-news.com - - sobees.com - - soccerbase.com - - soccerstand.com - - social-bookmarking-site.com - - socialappspot.com - - socialsecurity.gov - - socialtheater.com - - socisynd.com - - socket.io - - sockslist.net - - socrec.org - - sod.co.jp - - soft.idv.tw - - soft4fun.net - - softanony.info - - softether-download.com - - softether.co.jp - - softether.org - - softonic.it - - softonic.pl - - softsurroundingsoutlet.com - - softtime.ru - - sogclub.com - - sogo360.com - - sogoo.org - - sohcradio.com - - sohfrance.org - - soifind.com - - sologirlpussy.com - - solopeliculasgratis.com - - solopos.com - - solostocks.com - - soloxy.com - - somee.com - - sondevir.com - - songjianjun.com - - songsfacebook.com - - songtexte.com - - sony.co.jp - - sony.net - - sonyyoutube.com - - sopcast.com - - sopcast.org - - sopitas.com - - sorry.idv.tw - - sortiraparis.com - - sortol.com - - sostav.ru - - sosyalmedya.co - - soubory.com - - soumo.info - - soundcloud.com - - soundofhope.org - - sourceforge.net - - sourcewadio.com - - southnews.com.tw - - sowers.org.hk - - sowiki.net - - spacebattles.com - - spaggiari.eu - - spankingtube.com - - spankingtube.com.ar - - spankwire.com - - sparkasse-krefeld.de - - sparrowmailapp.com - - spb.com - - spbo.com - - speakeasy.net - - speakerdeck.com - - spectraltube.com - - speed-proxy.com - - speedanalysis.net - - speedpluss.org - - speedtest.net - - spela.se - - spicejet.com - - spicyxxxtube.com - - spielen.com - - spike.com - - spirit1053.com - - spoiledvirgins.com - - sponsorizzaconfacebook.com - - sport.be - - sport.cz - - sport.ua - - sportbox.ru - - sportchalet.com - - sportinglife.com - - sportowefakty.pl - - sportsmansoutdoorsuperstore.com - - sportsnet.ca - - sportsworldi.com - - sporttu.com - - spotflux.com - - spring.org.uk - - sproxy.net - - spy-mobile-phone.com - - spy.co.nl - - spy2mobile.com - - spysurfing.com - - sreality.cz - - srisland.com - - sryoutube.com - - ssfacebook.com - - sskyn.com - - sslproxy.in - - sslsecureproxy.com - - ssproxy.pw - - sss.com - - ssshhh8.com - - sssyoutube.com - - sstmlt.net - - ssyoutube.com - - stackfile.com - - stardollproxy.co.uk - - starp2p.com - - starprivacy.com - - startpage.com - - state.gov - - state168.com - - stateofthemedia.org - - stats.com - - stealthiness.org - - stealthweb.net - - steepto.com - - steganos.com - - steves-digicams.com - - stheadline.com - - stickam.com - - stickam.jp - - stileproject.com - - stirileprotv.ro - - stjobs.sg - - stockingsforsex.com - - stooq.pl - - stop-block.com - - stoptibetcrisis.net - - stormmediagroup.com - - straighttalk.com - - stranabg.com - - stranamasterov.ru - - streamate.com - - streamica.com - - streamingmedia.com - - streampocket.com - - streetvoice.com - - stripproxy.info - - strongvpn.com - - sttlbb.com - - student.tw - - studentrate.com - - studysurf.com - - stumbleupon.com - - stupidcams.com - - stupidvideos.com - - stylebistro.com - - stylebook.de - - subito.it - - submarino.com.br - - subscribe.ru - - sudanfacebook.com - - sudani.sd - - sudouest.fr - - sugarsync.com - - sum.com.tw - - summify.com - - sumrando.com - - sun.mv - - sun111.com - - sunbirdarizona.com - - suncity.com.mx - - sunporno.com - - suoluo.org - - superdownloads.com.br - - superfreevpn.com - - superglam.com - - supergreenstuff.com - - superhideip.com - - superhqporn.com - - superpages.com - - supertv.com.tw - - supertweet.net - - supervpn.net - - suprememastertv.com - - suresome.com - - surf-anonymous.info - - surf-for-free.com - - surf100.com - - surf55.com - - surfall.net - - surfcovertly.com - - surfeasy.com - - surfeasy.com.au - - surfert.nl - - surfhidden.com - - surfinternet.org - - surfit.info - - surfma.nu - - surftunnel.com - - surftunnel.org - - surfwebsite.org - - surveybypass.com - - susjed.com - - sutunhaber.com - - suzuki.co.jp - - swapip.com - - swedenbay.info - - sweetandpussy.com - - swiatlopana.com - - swissvpn.net - - swisswebproxy.ch - - switchadhub.com - - switchvpn.net - - swordsoft.idv.tw - - sydneytoday.com - - sympatico.ca - - syoutube.com - - syriantube.net - - sytes.net - - syx86.cn - - syx86.com - - szbbs.net - - szetowah.org.hk - - t-basic.com - - t-mobilebankowe.pl - - t.co - - t33nies.com - - t35.com - - t66y.biz - - t66y.com - - taa-usa.org - - taaze.tw - - tabletpcreview.com - - tabloidnova.com - - taboofucktube.com - - tabtter.jp - - tacem.org - - taconet.com.tw - - taedp.org.tw - - tagesspiegel.de - - taggy.jp - - taipei.gov.tw - - taipeisociety.org - - taisele.com - - taisele.net - - taiwan-sex.com - - taiwanbible.com - - taiwancon.com - - taiwandaily.net - - taiwanjustice.com - - taiwankiss.com - - taiwannation.com.tw - - taiwannews.com.tw - - taiwantt.org.tw - - taiwanus.net - - taiyangbao.ca - - takaratomy.co.jp - - takbook.com - - take2hosting.com - - takesport.idv.tw - - takvahaber.net - - talkenglish.com - - tamizhyoutube.com - - tampabay.com - - tamtay.vn - - tanea.gr - - tanga.com - - taohuazu.us - - taoism.net - - taolun.info - - tap.az - - tapchidanong.org - - tapuz.co.il - - taragana.com - - taringa.net - - taste.com.au - - tatamotors.com - - tatar.ru - - taweet.com - - tawhed.ws - - taxes.gov.az - - tayelu.com - - tbsec.org - - tbsn.org - - tbsseattle.org - - tca.org.tw - - tclyy.com - - teashark.com - - technopoint.ru - - techonthenet.com - - techsonian.com - - techtarget.com - - techtimes.com - - techulator.com - - tecmilenio.edu.mx - - tecmint.com - - teen-handjob.com - - teenbrats.com - - teencoreclub.com - - teenhottube.com - - teenpinkvideos.com - - teenport.com - - teens-pic.com - - teensinasia.com - - teensoncouch.com - - teensyoutube.com - - teenzvidz.com - - tefal.co.uk - - tefal.com - - tehago.com - - tejji.com - - teknosa.com - - tekstowo.pl - - telecharger-videos-youtube.com - - telecomitalia.it - - telecomspace.com - - telefonica.com - - telefonino.net - - telegraph.co.uk - - telemundo.com - - telenet.be - - teletrac.com - - telexfree.com - - telkom.co.id - - template-blogspot.com - - template.my.id - - templateparablogspot.com - - tenacy.co.uk - - tenacy.com - - tenantsact.org.au - - tennis-warehouse.com - - th38.com - - thaicn.com - - thaidojin.com - - the-cloak.com - - theafricavoice.com - - thebestdailyproxy.com - - thebestofproxy.info - - thebestproxy.info - - thebestproxyserver.com - - theblaze.com - - thebobs.com - - thechinabeat.org - - thecoveteur.com - - thecrew.com - - thedesigninspiration.com - - theepochtimes.com - - thefacebook.com - - thefacesoffacebook.com - - thefastbay.com - - thefutoncritic.com - - theglobalmail.org - - theguardian.co - - theguardian.com - - thehousenews.com - - thehun.com - - theinquirer.net - - thelawdictionary.org - - theloop.ca - - themify.me - - themovs.com - - thenewcivilrightsmovement.com - - theninjaproxy.com - - thenote.com.tw - - theopenproxy.net - - thepeachpalace.com - - thepiratebay.org - - thepiratebay.org.es - - thepiratebay.org.in - - thepiratemirror.com - - theproxy.eu - - theproxyfree.com - - theproxypirate.com - - theregister.co.uk - - therock.net.nz - - thesartorialist.com - - thesimpledollar.com - - thesun.net - - thetend.com - - thetibetpost.com - - thetrackr.com - - theuniqueproxy.com - - thevisiontimes.ca - - theweathernetwork.com - - thewiseguise.com - - thewrap.com - - thexite.com - - thinkadvisor.com - - thinkfla.com - - thinkingtaiwan.com - - thisav.com - - thisisgoodshit.info - - thongdreams.com - - thoof.com - - thqafawe3lom.com - - thscore.cc - - thumbzilla.com - - tiandixing.org - - tianhuayuan.com - - tiantibooks.org - - tianzhu.org - - tiava.com - - tibet.com - - tibet.com.au - - tibet.de - - tibet.net - - tibet.org.tw - - tibetanyouthcongress.org - - tibethouse.jp - - tibetonline.tv - - tibetsun.com - - tibettimes.net - - ticbeat.com - - ticket.com.tw - - tiempo.com - - tiempo.hn - - tiffanyarment.com - - tigerdroppings.com - - tigo.com.co - - tiki-online.com - - tim.com.br - - tim.it - - timdir.com - - time.com - - timesinternet.in - - timeturk.com - - timsah.com - - timshan.idv.tw - - timtadder.com - - tiney.com - - tingtingjidi.com - - tinthethao.com.vn - - tintuc101.com - - tintuconline.com.vn - - tiny.cc - - tiny18.net - - tinychat.com - - tinyjugs.com - - tinysubversions.com - - tipp3.at - - tiscali.it - - tistory.com - - tjsp.jus.br - - tmagazine.com - - tmd38.info - - tmi.me - - tmn.idv.tw - - tn.gov.in - - tnaflix.com - - tnews.cc - - tnpsc.gov.in - - tnscg.com - - to.ly - - tobu.co.jp - - today.it - - todoinstagram.com - - togetter.com - - tokfm.pl - - tokyo-247.com - - tokyo-hot.com - - tokyo-motorshow.com - - tokyo2hot.com - - tokyocn.com - - tom365.cc - - tomica.ru - - tomoyax.com - - toodoc.com - - toolslib.net - - top-page.ru - - top-proxies.co.uk - - top-xhamster.com - - top1health.com - - top55.net - - top81.ws - - topchinesenews.com - - topchretien.com - - topify.com - - topincestvideo.com - - topnews.in - - topnews.jp - - topor4ik.ru - - topshareware.com - - topspeed.com - - topsy.com - - toptweet.org - - topunblock.com - - topzone.net - - torcedores.com - - torcn.com - - torguard.net - - toronto.ca - - torproject.org - - torproject.org.in - - torrent-tv.ru - - torrentcrazy.com - - torrentday.com - - torrentkitty.com - - torrentprivacy.com - - torrentproxies.com - - torrentroom.com - - torrinomedica.it - - tortoisesvn.net - - torvpn.com - - tosarang.net - - toshiba.com - - totalfilm.com - - totalwar.com - - toukougazou.net - - touslesdrivers.com - - tover.net - - tovima.gr - - towngain.com - - toypark.in - - tp-linkru.com - - tp1.jp - - tparents.org - - tpe.gov.tr - - tpi.org.tw - - tpimage.com - - tpuser.idv.tw - - tr-youtube.com - - tr.im - - trabajando.cl - - trabajando.com - - trabajos.com - - trackid.info - - trackyoutube.com - - traffic-delivery.com - - traffichaus.com - - trafton.org - - trafviz.com - - transdoc.com.gt - - transfermarkt.co.uk - - transfermarkt.com - - transfermarkt.es - - transworld.net - - travellingthere.com - - trend.az - - trendingweb.net - - trendsmap.com - - trialofccp.org - - trialproxy.com - - tribune.gr - - tricksfacebook.com - - trionworlds.com - - trippinwithtara.com - - triumph.com - - trivago.co.uk - - trivago.de - - trouw.nl - - trovaprezzi.it - - trtc.com.tw - - trucchifacebook.com - - trust.ru - - trusteer.com - - trustpilot.nl - - truveo.com - - tryteenstube.com - - ts8888.net - - tsb.co.uk - - tsctv.net - - tsemtulku.com - - tsep.info - - tsn.ca - - tsunagarumon.com - - tt22.info - - ttj123.com - - tts8888.net - - tttan.com - - ttv.com.tw - - tuanzt.com - - tubaholic.com - - tube.com - - tube8.com - - tube8.com.co - - tubecao.com - - tubedupe.com - - tubegals.com - - tubeislam.com - - tubent.com - - tubenube.com - - tubeofmusic.com - - tubeoxy.com - - tubepleasure.com - - tubeproxy.nu - - tubeproxy.se - - tubetop69.com - - tubeum.com - - tubewhale.com - - tubewolf.com - - tubexplorer.com - - tuempresaenfacebook.com - - tuidang.org - - tuitui.info - - tumblr.com - - tumutanzi.com - - tune.pk - - tunein.com - - tuneupmymac.com - - tunnelbear.com - - tuochat.com - - turansam.org - - turansesi.com - - turbobit.net - - turbohide.com - - turkeybay.info - - turkeyforum.com - - turkishnews.com - - turkist.org - - turkistanmaarip.org - - turkticaret.net - - turner.com - - tusfrasesparafacebook.com - - tushycash.com - - tuspelis.co - - tutorialblogspot.com - - tuttoannunci.org - - tuttonapoli.net - - tuvpn.com - - tv-greek.com - - tv.com - - tv.com.pk - - tv007.tv - - tv2.pw - - tv5000.com - - tv8888.net - - tv9k.net - - tvb.com - - tvboxnow.com - - tvgay.ru - - tvn.cl - - tvplayvideos.com - - tvvcd.com - - tvzvezda.ru - - tw01.org - - tw1.com - - tw100s.com - - tw116.com - - tw789.net - - twaitter.com - - twatter.com - - twaud.io - - twavi.com - - twavtv.com - - twbbs.net.tw - - twbbs.org - - twbbs.tw - - tweakmytwitter.com - - tweematic.com - - tweepi.com - - tweepml.org - - tweetbackup.com - - tweetbinder.com - - tweetboner.biz - - tweetdeck.com - - tweete.net - - tweetmeme.com - - tweetphoto.com - - tweetswind.com - - tweettunnel.com - - tweetvalue.com - - tweetymail.com - - twem.idv.tw - - twhirl.org - - twib.jp - - twibble.de - - twicsy.com - - twiends.com - - twifan.com - - twilightsex.com - - twilio.com - - twimg.com - - twimi.net - - twinsv.com - - twipple.jp - - twishort.com - - twistar.cc - - twister.net.co - - twisterio.com - - twit2d.com - - twitip.com - - twitlonger.com - - twitmania.com - - twitpic.com - - twitstat.com - - twittanic.com - - twittbot.net - - twitter-icon.com - - twitter.com - - twitter.com.br - - twitter4j.org - - twittercentral.com.br - - twittercounter.com - - twitterfall.com - - twitterfeed.com - - twittergadget.com - - twitterkr.com - - twitthat.com - - twitturk.com - - twitturly.com - - twitvid.com - - twitzap.com - - twopcharts.com - - twreg.info - - twskype.com - - twtkr.com - - twtmaster.com - - twtrland.com - - twunbbs.com - - twurl.nl - - twyac.org - - twylah.com - - tycool.com - - typemag.jp - - typingtest.com - - u15.tv - - uas2.com - - uberconference.com - - ubervu.com - - ubint.net - - ubldirect.com - - ubtoz.com - - ubuntu.ru - - ucam.org - - ucoz.ru - - ucr.ac.cr - - ucsc.edu - - udn.com - - udn.com.tw - - ufreevpn.com - - ufret.jp - - ufux.pl - - uggaustralia.com - - ugo.com - - uighurbiz.net - - uk-proxy.co.uk - - uk.to - - ukbay.info - - ukliferadio.co.uk - - ukproxyserver.com - - ukryj.info - - ukusvpn.com - - ukwebproxy.eu - - ulike.net - - ulkuocaklari.org.tr - - ultimatepro.eu - - ultrabestproxy.com - - ultrafastproxy.com - - ultrapussy.com - - ultrasurf.pl - - ultrasurf.us - - ultrasurfing.com - - ulusalkanal.com.tr - - ummetislam.net - - unblk.net - - unblock-everything.com - - unblock-facebookproxy.com - - unblock-me.org - - unblock-proxy.com - - unblock-proxybunker.co.uk - - unblock-us.com - - unblock.cn.com - - unblock.nu - - unblock.pk - - unblock.pl - - unblock123.com - - unblock24.de - - unblock4ever.com - - unblock4ever.info - - unblockaccess.com - - unblockanysite.net - - unblockanything.com - - unblockaproxy.com - - unblockclick.info - - unblockdmm.com - - unblocked.in - - unblockedfacebook.net - - unblockedproxy.net - - unblockedproxy.us - - unblocker.biz - - unblocker.me - - unblockersurf.com - - unblockerz.net - - unblockingwebsite.com - - unblockinstagram.com - - unblockmega.com - - unblockmyweb.com - - unblockpirate.com - - unblockpornsites.com - - unblockproxy.pk - - unblockproxy.us - - unblockreal.info - - unblocksit.es - - unblocksite.info - - unblocksocialmedia.com - - unblockthatsite.net - - unblockvideos.com - - unblockvpn.com - - unblockwebsite.net - - unblockwebsites.se - - unblockyoutube.co - - unblockyoutube.co.uk - - unblockyoutube.com - - unblockyoutube.com.pk - - unblockyoutube.eu - - unblockyoutube.me - - unblockyoutube.org - - unblockyoutube.us - - unblockyoutuber.com - - unblog.fr - - unbloock.com - - uncensoredjapanporn.com - - uncw.edu - - uncyclopedia.info - - uncyclopedia.tw - - underscorejs.org - - underwoodammo.com - - uni-goettingen.de - - uni.cc - - unica.ro - - unicorn-x.com - - unifi.it - - unification.net - - unionesarda.it - - unipa.it - - uniproxy.com - - uniteddaily.com.my - - unitedstatesproxy.info - - unitn.it - - universal-music.de - - universityproxy.net - - unix100.com - - unixmen.com - - unknownproxy.com - - unlockmethis.com - - unodedos.com - - unpo.org - - unrestricted.biz - - unseen.is - - unsoloclic.info - - untraceable.us - - uol.com.br - - up.ac.za - - upcoming.nl - - updatesmarugujarat.in - - updatestar.com - - upload4u.info - - uploaded.to - - uploadhero.co - - uploads.ru - - uploadstation.com - - ur7s.com - - ura.gov.sg - - urasunday.com - - urbanoutfitters.com - - urcheeky.com - - urgentfury.com - - url.com.tw - - url10.org - - urlm.de - - urlvoid.com - - us-proxy.org - - us-webproxy.com - - us.to - - usa-proxy.org - - usa.gov - - usafastproxy.info - - usaip.eu - - usaproxy.org - - usaupload.net - - usawebproxy.com - - usazm.net - - uscis.gov - - usejump.com - - userlocal.jp - - usertube.com - - usf.edu - - usgs.gov - - uship.com - - ushistory.org - - usproxy.nu - - usproxy4free.info - - usprxy.com - - ustream.tv - - uswebproxy.com - - uswebproxy.us - - utah.gov - - utom.us - - utube-youtube.com - - utubeclassic.com - - uu.nl - - uu158.com - - uu898.com - - uueyy.com - - uukt.idv.tw - - uurt.cc - - uushare.com - - uva.nl - - uvidi.com - - uw.hu - - uwants.com - - uwants.net - - uwi.edu - - uybbb.com - - uyghur.co.uk - - uyghuramerican.org - - uyghurcongress.org - - uyghurnet.org - - uyghurpress.com - - uyhewer.biz - - uymaarip.com - - uysam.org - - uyttt.com - - uzbekweb.net - - uzor4ik.ru - - uzum.tv - - v0791.com - - v5yy.com - - v6.facebook.com - - van698.com - - vancitybuzz.com - - vanderbilt.edu - - vanemu.cn - - vanguardia.com.mx - - vanilla-jp.com - - vanityfair.com - - vanpeople.com - - vansky.com - - vcd01.com - - vcricket.com - - vcupboss.com - - vcupbox.net - - vdyoutube.com - - veb4.info - - veclip.com - - vectroproxy.com - - vegadisk.com - - vegasmpegs.com - - vegasred.com - - vegorpedersen.com - - veinfoportal.com - - velkaepocha.sk - - veoh.com - - verizon.net - - verpeliculayoutube.com - - versavpn.com - - versus.com - - vertbaudet.fr - - veryxe.com - - vft.com.tw - - vg247.com - - vi.nl - - viajar.com - - viamichelin.de - - viamichelin.fr - - viber.com - - vickyfuck.com - - victimsofcommunism.org - - vidal.fr - - video-hned.com - - video-proxy.com - - videobam.com - - videobox.com - - videochatforfacebook.com - - videodetective.com - - videoegg.com - - videoixir.net - - videomaximum.com - - videomo.com - - videopediaworld.com - - videophim.net - - videosq.com - - videotraker.com - - videouri.com - - vidoevo.com - - vidoser.com.ua - - vidoser.org - - vidproxy.com - - vidsfucker.com - - viduba.com - - vidule.com - - viemo.com - - vietbet.com - - vietdaikynguyen.com - - vietfun.com - - vietnamplus.vn - - vietvideos.tv - - vietvideos.vn - - vimeo.com - - vintagecuties.com - - vintagefetish.net - - vintagexhamster.com - - vip-zona.biz - - viptube.com - - viralporn.com - - viraltag.com - - virgintrains.co.uk - - visibletweets.com - - visitorsweater.eu - - visitscotland.com - - visuallightbox.com - - vit.ac.in - - vitutor.com - - vivatube.com - - vivthomas.com - - viyoutube.com - - vizardsgunsandammo.com - - vizle.tv - - vjmedia.com.hk - - vkinotik.net - - vkussovet.ru - - voa.mobi - - voacantonese.com - - voachinese.com - - voachineseblog.com - - voafanti.com - - voanews.com - - voatibetan.com - - vodoumedia.com - - vogue.co.uk - - vogue.com - - voici-news.fr - - volantinofacile.it - - volvocars.com - - vorterix.com - - vot.org - - vovo2000.com - - vovokan.com - - voxer.com - - voy.com - - voyeurdaily.com - - vpalsystem.com - - vpn333.com - - vpn4all.com - - vpnaccount.org - - vpnaccounts.com - - vpnbook.com - - vpnbrowse.com - - vpncloud.me - - vpncup.com - - vpndaquan.com - - vpndeluxe.com - - vpngate.jp - - vpngate.net - - vpnintouch.com - - vpnip.net - - vpnmaster.com - - vpnmaster.org - - vpnoneclick.com - - vpnpick.com - - vpnreactor.com - - vpnsecure.me - - vpnsp.com - - vpnster.com - - vpntime.com - - vpntraffic.com - - vpntunnel.com - - vpntunnel.net - - vpnuk.info - - vpnunlock.asia - - vpnvip.com - - vporn.com - - vslovetv.com - - vtunnel.com - - vtunnel.pk - - vu.edu.au - - vuclip.com - - vufacebook.com - - vukajlija.com - - vuku.ru - - vunblock.com - - vurbmoto.com - - vusay.com - - vuze.com - - vwv.cn - - w3.org - - wa-com.com - - wadtube.com - - wahas.com - - waigaobu.com - - waikeung.info - - waiwaier.com - - wakegov.com - - wakwak-facebook.com - - wallonie.be - - wallpaper.com - - wamda.com - - wan-press.org - - wangjinbo.org - - wango.org - - wangruowang.org - - wank.to - - wanktube.com - - wanmm.info - - want-daily.com - - wantchinatimes.com - - wantyoutube.com - - waproxy.com - - waqn.com - - waratahs.com.au - - warehouse333.com - - wargameyau.net - - waselpro.com - - watchinese.com - - watchmygf.net - - watchproxy.com - - watchxtube.com - - wattpad.com - - wattpad.com.br - - wauwaa.com - - wawwproxy.org - - waybig.com - - wbxia.com - - wdaz.com - - wdcdn.net - - weare.hk - - wearehairy.com - - wearn.com - - web4proxy.com - - webanonyme.com - - webanonymizer.org - - webappers.com - - webaula.com.br - - webbee.info - - webcamproxy.com - - webcams.com - - webdesignrecipes.com - - webempresa.com - - webevade.com - - webflow.com - - webfreer.com - - weblagu.com - - weblogspot.com - - webmail.co.za - - webmasta.org - - webnewcredit.name - - webpage.idv.tw - - webproxies.org - - webproxy-server.com - - webproxy-service.de - - webproxy.at - - webproxy.ca - - webproxy.com.de - - webproxy.eu - - webproxy.hu - - webproxy.la - - webproxy.net - - webproxy.pk - - webproxy.ru - - webproxy.to - - webproxy.yt - - webproxyfree.net - - webproxyfree.org - - webproxylist.biz - - webproxyserver.net - - webproxyusa.com - - webrush.net - - websiteproxysite.com - - websteronline.com - - websurf.in - - webtalkforums.com - - webteb.com - - webtunnel.org - - webwarper.net - - webzesty.net - - weebly.com - - weekmag.info - - wefightcensorship.org - - wefong.com - - wego.co.in - - weiboleak.com - - weidui.cn - - weigegebyc.dreamhosters.com - - weiming.info - - weirdhentai.com - - welovecock.com - - welovetube.com - - wen.ru - - wengewang.org - - wenhui.ch - - wenxuecity.com - - wenxuewu.com - - wenyunchao.com - - werich.idv.tw - - werk.nl - - wermachtwas.info - - westca.com - - westjet.com - - westkit.net - - wet123.com - - wetmike.com - - wetplace.com - - wewehi.info - - wfmz.com - - wforum.com - - wgal.com - - whaaky.co.in - - whatblocked.com - - whathifi.com - - whatismyipaddress.com - - whatsthescore.com - - whendidyoujointwitter.com - - whippedass.com - - whiteblacksex.net - - whois.com - - whole30.com - - whoownsfacebook.com - - whoresofinstagram.com - - whorestube.com - - whotalking.com - - whydontyoutrythis.com - - whyewang.com - - whyproxy.com - - wiefy.com - - wife-xxx.com - - wifemovies.net - - wifi.gov.hk - - wikia.com - - wikiart.org - - wikibooks.org - - wikileaks.org - - wikimedia.org - - wikimedia.org.mo - - wikinews.org - - wikipedia.org - - wikisource.org - - wiksa.com - - wildammo.com - - wildfacebook.com - - wildjapanporn.com - - wildproxy.net - - wildtorture.com - - wildzoosex.net - - williamhill.com - - wind.gr - - windows-codec.com - - windowsmedia.com - - winporn.com - - wipo.int - - wisdompubs.org - - wisevid.com - - witopia.net - - wizardofodds.com - - wmzona.com - - wo.tc - - woaicaocao.com - - woaiwoaise1.info - - wofacai.com - - wolfofladbrokes.com - - wolframalpha.com - - womenonly.gr - - womensrightsofchina.org - - womenweb.de - - woool123.com - - woopie.jp - - woovpn.com - - wordpress.com - - wordpress.org - - wordreference.com - - workinretail.com - - worldcat.org - - worldjournal.com - - worldmarket.com - - worldnews01.com - - worldsex8.com - - worldvpn.net - - worth1000.com - - wosebar.com - - wow-clear.ru - - woyao.cl - - wpitaly.it - - wplr.com - - wpnew.ru - - wpoforum.com - - wqlhw.com - - wqyd.org - - wradio.com.mx - - wrc.com - - wrestlinginc.com - - wretch.cc - - writelonger.com - - wsj-asia.com - - wsj.com - - wsws.org - - wtfpeople.com - - wuaitxt.com - - wuala.com - - wufi.org.tw - - wujieliulan.com - - wuyuetan.com - - wuzhouclick.com - - wwe.com - - wwitv.com - - www.am730.com.hk - - www.freeproxyserver.uk - - www.homeftp.net - - www.info.vn - - www.newcenturynews.com - - www.rhcloud.com - - wyborcza.biz - - wyff4.com - - wymfw.org - - wyt750.com - - x-file.com.ar - - x-nudism.net - - x-torrents.org - - x2ds.com - - x365x.com - - x3xtube.com - - x4x6.com - - x772015.net - - x7780.net - - x7786.com - - x831.com - - x8cctv.net - - x8seo.com - - xartgirls.com - - xarthunter.com - - xartnudes.com - - xav1.info - - xav3.info - - xaxtube.com - - xbabe.com - - xbookcn.com - - xbookcn.net - - xchange.cc - - xcity.jp - - xcoyote.com - - xcritic.com - - xctsg.org - - xfcun.com - - xfiles.to - - xfm.pp.ru - - xfreehosting.com - - xfys.info - - xfyslu.com - - xhamster.com - - xhamster.vc - - xhamstercams.com - - xhamsterhq.com - - xiaav.cc - - xiao77.cc - - xiao776.com - - xiaochuncnjp.com - - xiaod.in - - xiaohexie.com - - xiaoli.cc - - xiaomi.in.ua - - xiaosege.com - - xidong.net - - xieshulou.com - - xiezi.us - - xihua.es - - xing.com - - xingbano1.com - - xingbayouni.net - - xinmiao.com.hk - - xinsheng.net - - xinwenshow.com - - xinxi3366.com - - xinyubbs.net - - xitenow.com - - xjav.tv - - xjizz.com - - xl.pt - - xmodelpics.com - - xnview.com - - xnxx.blog.br - - xnxxfacebook.com - - xocat.com - - xpornking.com - - xqidian.com - - xqiumi.com - - xrba.net - - xrea.com - - xrentdvd.com - - xrest.net - - xsejie.info - - xskywalker.com - - xtec.cat - - xthost.info - - xtlbb.com - - xtrasize.pl - - xtube.com - - xu4.net - - xuite.net - - xunblock.com - - xuxule.net - - xvideo.cc - - xvideos-fc2.com - - xvideos.com - - xvideos.com.br - - xvideos.com.bz - - xvideos.com.es - - xvideos.com.mx - - xvideos.es - - xvideos.jp - - xvideosfc2.com - - xvideosq.com - - xx33.us - - xxbbx.com - - xxeronetxx.info - - xxkxw.com - - xxlmovies.com - - xxooyy.org - - xxx-xhamster.com - - xxx-youtube.com - - xxx.com - - xxx.com.es - - xxx.com.mx - - xxx.com.py - - xxx.xxx - - xxxdessert.com - - xxxhost.me - - xxxpanda.com - - xxxstash.com - - xxxtv.me - - xxxx.com.au - - xxxxsextube.com - - xxxymovies.com - - xxys.cc - - xxyy123.com - - xys.org - - xyz566.net - - xzgod.net - - yabeb.com - - yackity-yak.com - - yad2.co.il - - yahoo.co.jp - - yahoo.com - - yahoo.com.hk - - yahoo.com.tw - - yahoo.jp - - yakmovies.com - - yalafacebook.com - - yanen.org - - yaproxy.com - - yasakli.net - - yasni.co.uk - - yasni.com - - yasukuni.or.jp - - yayabay.net - - yaypetiteteens.com - - ydxk.cn - - ydy.com - - yehua.org - - yellowproxy.net - - yenidenergenekon.com - - yeptube.com - - yesbank.co.in - - yesware.com - - yeyelu.com - - yi.org - - yibada.com - - yibian.idv.tw - - yidio.com - - yify-torrent.org - - yigese.us - - yikyakapp.com - - yildiz.edu.tr - - yimg.com - - yingchao8.com - - yinlaohan.us - - yinrense.com - - yipub.com - - yiwugou.com - - yixingjia.info - - yiyi.cc - - yle.fi - - ymail.com - - ymka.tv - - ymobile.jp - - yo168.net - - yobt.com - - yobt.tv - - yogeshblogspot.com - - yogichen.org - - yojizz.com - - yoltarifi.com - - yonkis.com - - yorkbbs.ca - - you-youtube.com - - youcanhide.net - - youcef85.com - - youdesir.com - - youdian.in - - youfck.com - - youjikan1.com - - youjizz.com - - youjizz.net - - youjoomla.info - - youjotube.com - - youliketeens.com - - youmaker.com - - yoump3.mobi - - youngatheartmommy.com - - youngfatties.com - - younggirls-sex.com - - youngleafs.com - - youngporntube.com - - youngteensexhd.com - - youniversalmedia.com - - youpai.org - - youporn.com - - youporn.com.bz - - youproxy.org - - youproxytube.com - - your-freedom.net - - yourlust.com - - yourmediahq.com - - yourtv.com.au - - yousendit.com - - youthnetradio.org - - youthwant.com.tw - - youtrannytube.com - - youtu.be - - youtube-mp3.com - - youtube-nocookie.com - - youtube-unlock.com - - youtube.be - - youtube.com - - youtube.com.br - - youtube.com.co - - youtubecn.com - - youtubefreeproxy.com - - youtubeproxy.co - - youtubeproxy.org - - youtubeproxy.pk - - youtubeunblocked.org - - youtubeunblocker.org - - youtubexyoutube.com - - youversion.com - - youwatch.org - - youxu.info - - ypmate.com - - yslang.com - - ytimg.com - - ytj.fi - - yts.re - - yuka.idv.tw - - yukinyan.info - - yunblock.com - - yunblocker.info - - yutaokeji.com - - yuvutu.com - - yvesrocherusa.com - - yvv.cn - - ywtx.cc - - yx51.net - - yyhacker.com - - yyii.org - - yypeng.com - - yysedy.com - - yzzk.com - - z953.ca - - zacebook.com - - zacebookpk.com - - zalmos.com - - zalmos.pk - - zaobao.com - - zaobao.com.sg - - zaozon.com - - zap.co.il - - zapjuegos.com - - zaurus.org.uk - - zbiornik.com - - zdnet.com.tw - - zdnet.de - - zeldawiki.org - - zelka.org - - zello.com - - zen-cart.com - - zend2.com - - zendproxy.com - - zengjinyan.org - - zenithoptions.com - - zerotunnel.com - - zertube.com - - zerx.tv - - zetagalleries.com - - zf.ro - - zfreet.com - - zfreez.com - - zhanbin.net - - zhaokaifang.com - - zhaoyn.com - - zhe.la - - zhengjian.org - - zhengwunet.org - - zhenjk.com - - zhibo8.cc - - zhinengluyou.com - - zhong.pp.ru - - zhongguobao.net - - zhuichaguoji.org - - zhuliu520.com - - ziddu.com - - zideo.nl - - zinio.com - - zipai99.net - - zipangcasino.com - - ziporn.com - - ziptt.com - - ziyuan5.com - - zjbdt.com - - zjypw.com - - zkaip.com - - zll.in - - zlvc.net - - zn.ua - - zoho.com - - zoll-auktion.de - - zombiega.ga - - zonaeuropa.com - - zonble.net - - zoo-fuck.net - - zoomby.ru - - zooshock.com - - zootoday.com - - zootool.com - - zoozle.net - - zorpia.com - - zqzj.net - - zs8080.com - - zshare.net - - zsrhao.com - - ztunnel.com - - zuary.com - - zuo.la - - zuola.com - - zuyoutube.com - - zuzazu.com - - zvents.com - - zwinky.com - - zxc22.idv.tw - - zz8080.com - - zzb.bz -trustedcas: -- commonname: VeriSign Class 3 Public Primary Certification Authority - G5 - cert: "-----BEGIN CERTIFICATE-----\nMIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB\nyjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\nExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\nU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\nZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\naG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL\nMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\nZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln\nbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp\nU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y\naXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1\nnmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex\nt0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz\nSdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG\nBO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+\nrCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/\nNIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E\nBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH\nBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy\naXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv\nMzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE\np6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y\n5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK\nWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ\n4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N\nhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\n-----END - CERTIFICATE-----\n" -globalconfigpollinterval: 1s -proxyconfigpollinterval: 1s diff --git a/integrationtest/go.mod b/integrationtest/go.mod new file mode 100644 index 000000000..0ca5025ea --- /dev/null +++ b/integrationtest/go.mod @@ -0,0 +1,253 @@ +module github.com/getlantern/flashlight-integration-test + +go 1.18 + +replace github.com/Jigsaw-Code/outline-ss-server => github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93 + +replace github.com/getlantern/flashlight => ../ + +// replace github.com/getlantern/http-proxy-lantern/v2 => ../../http-proxy-lantern + +replace github.com/elazarl/goproxy => github.com/getlantern/goproxy v0.0.0-20220805074304-4a43a9ed4ec6 + +replace github.com/refraction-networking/utls => github.com/getlantern/utls v0.0.0-20221011213556-17014cb6fc4a + +replace github.com/keighl/mandrill => github.com/getlantern/mandrill v0.0.0-20221004112352-e7c04248adcb + +replace github.com/lucas-clemente/quic-go => github.com/getlantern/quic-go v0.31.1-0.20230104154904-d810c964a217 + +require ( + github.com/getlantern/common v1.2.0 + github.com/getlantern/flashlight v0.0.0-00010101000000-000000000000 + github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230410110826-dfa8d257b655 + github.com/sirupsen/logrus v1.9.0 +) + +require ( + filippo.io/edwards25519 v1.0.0-rc.1.0.20210721174708-390f27c3be20 // indirect + git.torproject.org/pluggable-transports/goptlib.git v1.2.0 // indirect + github.com/Jigsaw-Code/outline-ss-server v1.4.0 // indirect + github.com/OperatorFoundation/Replicant-go/Replicant/v3 v3.0.14 // indirect + github.com/OperatorFoundation/Starbridge-go/Starbridge/v3 v3.0.12 // indirect + github.com/OperatorFoundation/ghostwriter-go v1.0.6 // indirect + github.com/OperatorFoundation/go-bloom v1.0.1 // indirect + github.com/OperatorFoundation/go-shadowsocks2 v1.1.12 // indirect + github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63 // indirect + github.com/aead/ecdh v0.2.0 // indirect + github.com/alecthomas/atomic v0.1.0-alpha2 // indirect + github.com/anacrolix/chansync v0.3.0 // indirect + github.com/anacrolix/dht/v2 v2.19.2-0.20221121215055-066ad8494444 // indirect + github.com/anacrolix/go-libutp v1.2.0 // indirect + github.com/anacrolix/log v0.13.2-0.20221123232138-02e2764801c3 // indirect + github.com/anacrolix/missinggo v1.3.0 // indirect + github.com/anacrolix/missinggo/perf v1.0.0 // indirect + github.com/anacrolix/missinggo/v2 v2.7.0 // indirect + github.com/anacrolix/mmsg v1.0.0 // indirect + github.com/anacrolix/multiless v0.3.0 // indirect + github.com/anacrolix/publicip v0.2.0 // indirect + github.com/anacrolix/stm v0.4.0 // indirect + github.com/anacrolix/sync v0.4.0 // indirect + github.com/anacrolix/torrent v1.48.1-0.20230103142631-c20f73d53e9f // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/benbjohnson/immutable v0.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dchest/siphash v1.2.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72 // indirect + github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9 // indirect + github.com/getlantern/borda v0.0.0-20220308134056-c4a5602f778e // indirect + github.com/getlantern/broflake v0.0.0-20230330150844-7307935f5abb // indirect + github.com/getlantern/bufconn v0.0.0-20210901195825-fd7c0267b493 // indirect + github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd // indirect + github.com/getlantern/cmux v0.0.0-20230301223233-dac79088a4c0 // indirect + github.com/getlantern/cmux/v2 v2.0.0-20230228131144-addc208d233b // indirect + github.com/getlantern/cmuxprivate v0.0.0-20211216020409-d29d0d38be54 // indirect + github.com/getlantern/context v0.0.0-20220418194847-3d5e7a086201 // indirect + github.com/getlantern/elevate v0.0.0-20220903142053-479ab992b264 // indirect + github.com/getlantern/ema v0.0.0-20190620044903-5943d28f40e4 // indirect + github.com/getlantern/enhttp v0.0.0-20210901195634-6f89d45ee033 // indirect + github.com/getlantern/errors v1.0.3 // indirect + github.com/getlantern/eventual v1.0.0 // indirect + github.com/getlantern/eventual/v2 v2.0.2 // indirect + github.com/getlantern/fdcount v0.0.0-20210503151800-5decd65b3731 // indirect + github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c // indirect + github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede // indirect + github.com/getlantern/fronted v0.0.0-20221102104652-893705395782 // indirect + github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822 // indirect + github.com/getlantern/geolookup v0.0.0-20210901195705-eec711834596 // indirect + github.com/getlantern/go-cache v0.0.0-20141028142048-88b53914f467 // indirect + github.com/getlantern/golog v0.0.0-20230206140254-6d0a2e0f79af // indirect + github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb // indirect + github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac // indirect + github.com/getlantern/hellosplitter v0.1.1 // indirect + github.com/getlantern/hex v0.0.0-20220104173244-ad7e4b9194dc // indirect + github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770 // indirect + github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049 // indirect + github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e // indirect + github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696 // indirect + github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42 // indirect + github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54 // indirect + github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966 // indirect + github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89 // indirect + github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c // indirect + github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a // indirect + github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d // indirect + github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be // indirect + github.com/getlantern/mitm v0.0.0-20210622063317-e6510574903b // indirect + github.com/getlantern/mockconn v0.0.0-20200818071412-cb30d065a848 // indirect + github.com/getlantern/msgpack v3.1.4+incompatible // indirect + github.com/getlantern/mtime v0.0.0-20200417132445-23682092d1f7 // indirect + github.com/getlantern/multipath v0.0.0-20220920195041-55195f38df73 // indirect + github.com/getlantern/netx v0.0.0-20211206143627-7ccfeb739cbd // indirect + github.com/getlantern/ops v0.0.0-20220713155959-1315d978fff7 // indirect + github.com/getlantern/osversion v0.0.0-20230221120431-d6f9971f8ccf // indirect + github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360 // indirect + github.com/getlantern/preconn v1.0.0 // indirect + github.com/getlantern/proxy/v2 v2.0.1-0.20220303164029-b34b76e0e581 // indirect + github.com/getlantern/psmux v1.5.15-0.20200903210100-947ca5d91683 // indirect + github.com/getlantern/quicproxy v0.0.0-20220808081037-32e9be8ec447 // indirect + github.com/getlantern/quicwrapper v0.0.0-20230124133216-09e62d6a4ff2 // indirect + github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7 // indirect + github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c // indirect + github.com/getlantern/telemetry v0.0.0-20230227190802-faa666d3b3d5 // indirect + github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9 // indirect + github.com/getlantern/tinywss v0.0.0-20211216020538-c10008a7d461 // indirect + github.com/getlantern/tlsdefaults v0.0.0-20171004213447-cf35cfd0b1b4 // indirect + github.com/getlantern/tlsdialer/v3 v3.0.3 // indirect + github.com/getlantern/tlsmasq v0.4.7-0.20230302000139-6e479a593298 // indirect + github.com/getlantern/tlsresumption v0.0.0-20211216020551-6a3f901d86b9 // indirect + github.com/getlantern/tlsutil v0.5.3 // indirect + github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad // indirect + github.com/getlantern/uuid v1.2.0 // indirect + github.com/getlantern/withtimeout v0.0.0-20160829163843-511f017cd913 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf // indirect + github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5 // indirect + github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571 // indirect + github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece // indirect + github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29 // indirect + github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4 // indirect + github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/huin/goupnp v1.0.3 // indirect + github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/cpuid v1.3.1 // indirect + github.com/klauspost/pgzip v1.2.5 // indirect + github.com/klauspost/reedsolomon v1.9.9 // indirect + github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/lucas-clemente/quic-go v0.31.1 // indirect + github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect + github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mdlayher/netlink v1.1.0 // indirect + github.com/mholt/archiver/v3 v3.5.1 // indirect + github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7 // indirect + github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f // indirect + github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-server-timing v1.0.0 // indirect + github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 // indirect + github.com/nwaples/rardecode v1.1.2 // indirect + github.com/onsi/ginkgo/v2 v2.2.0 // indirect + github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect + github.com/oschwald/geoip2-golang v1.8.0 // indirect + github.com/oschwald/maxminddb-golang v1.10.0 // indirect + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect + github.com/pierrec/lz4/v4 v4.1.12 // indirect + github.com/pion/datachannel v1.5.5 // indirect + github.com/pion/dtls/v2 v2.2.6 // indirect + github.com/pion/ice/v2 v2.3.1 // indirect + github.com/pion/interceptor v0.1.12 // indirect + github.com/pion/logging v0.2.2 // indirect + github.com/pion/mdns v0.0.7 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.10 // indirect + github.com/pion/rtp v1.7.13 // indirect + github.com/pion/sctp v1.8.6 // indirect + github.com/pion/sdp/v3 v3.0.6 // indirect + github.com/pion/srtp/v2 v2.0.12 // indirect + github.com/pion/stun v0.4.0 // indirect + github.com/pion/transport/v2 v2.0.2 // indirect + github.com/pion/turn/v2 v2.1.0 // indirect + github.com/pion/udp/v2 v2.0.1 // indirect + github.com/pion/webrtc/v3 v3.1.58 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.13.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/refraction-networking/utls v1.0.0 // indirect + github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect + github.com/samber/lo v1.25.0 // indirect + github.com/shadowsocks/go-shadowsocks2 v0.1.5 // indirect + github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect + github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/stretchr/testify v1.8.2 // indirect + github.com/templexxx/cpu v0.0.8 // indirect + github.com/templexxx/xorsimd v0.4.1 // indirect + github.com/ti-mo/conntrack v0.3.0 // indirect + github.com/ti-mo/netfilter v0.3.1 // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect + github.com/tkuchiki/go-timezone v0.2.0 // indirect + github.com/ulikunitz/xz v0.5.10 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01 // indirect + gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb // indirect + gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.36.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0 // indirect + go.opentelemetry.io/otel/metric v0.37.0 // indirect + go.opentelemetry.io/otel/sdk v1.14.0 // indirect + go.opentelemetry.io/otel/sdk/metric v0.37.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.21.0 // indirect + golang.org/x/crypto v0.7.0 // indirect + golang.org/x/exp v0.0.0-20220823124025-807a23277127 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect + golang.org/x/tools v0.6.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect + google.golang.org/grpc v1.52.3 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + howett.net/plist v0.0.0-20200419221736-3b63eb3a43b5 // indirect + nhooyr.io/websocket v1.8.7 // indirect +) diff --git a/integrationtest/go.sum b/integrationtest/go.sum new file mode 100644 index 000000000..86c33d080 --- /dev/null +++ b/integrationtest/go.sum @@ -0,0 +1,1486 @@ +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= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797/go.mod h1:sXBiorCo8c46JlQV3oXPKINnZ8mcqnye1EkVkqsectk= +crawshaw.io/sqlite v0.3.2/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1.0.20210721174708-390f27c3be20 h1:iJoUgXvhagsNMrJrvavw7vu1eG8+hm6jLOxlLFcoODw= +filippo.io/edwards25519 v1.0.0-rc.1.0.20210721174708-390f27c3be20/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +git.torproject.org/pluggable-transports/goptlib.git v1.0.0/go.mod h1:YT4XMSkuEXbtqlydr9+OxqFAyspUv0Gr9qhM3B++o/Q= +git.torproject.org/pluggable-transports/goptlib.git v1.2.0 h1:0qRF7Dw5qXd0FtZkjWUiAh5GTutRtDGL4GXUDJ4qMHs= +git.torproject.org/pluggable-transports/goptlib.git v1.2.0/go.mod h1:4PBMl1dg7/3vMWSoWb46eGWlrxkUyn/CAJmxhDLAlDs= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-storage-blob-go v0.14.0/go.mod h1:SMqIBi+SuiQH32bvyjngEewEeXoPfKMgWlBDaYf6fck= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/FZambia/sentinel v1.0.0/go.mod h1:ytL1Am/RLlAoAXG6Kj5LNuw/TRRQrv2rt2FT26vP5gI= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OperatorFoundation/Replicant-go/Replicant/v3 v3.0.14 h1:vIn8L328MU9iGvOavG4jne2HUlhOp1Hyb4RxzvNerZ8= +github.com/OperatorFoundation/Replicant-go/Replicant/v3 v3.0.14/go.mod h1:VGjZcGWvwhrYRxfw2TgIIkKK6rH61ynNH3CH0xN1YeQ= +github.com/OperatorFoundation/Starbridge-go/Starbridge/v3 v3.0.12 h1:rS9O9IlFHmk39lnfMgpZ/3sO98/RmlWKZjgOdFqH2fE= +github.com/OperatorFoundation/Starbridge-go/Starbridge/v3 v3.0.12/go.mod h1:07iKAvNbFKIbWSWH/GGfe3HiDFtO6XLgJmxsKnFvars= +github.com/OperatorFoundation/ghostwriter-go v1.0.6 h1:2E5D4qDKwsV+LQoKGtgIyjq5JvMiBZf8ySR8q0PP4vc= +github.com/OperatorFoundation/ghostwriter-go v1.0.6/go.mod h1:+uejzC1RRxZwngnCArqZX3d7i6ZX4Si8jNG8G6oCIKQ= +github.com/OperatorFoundation/go-bloom v1.0.1 h1:8q/rfgfG7OvwGkmzusIuV8PlS8MvA/T0kQ2MXm9371g= +github.com/OperatorFoundation/go-bloom v1.0.1/go.mod h1:b6bJWAnYIhwDgFIIolHyeuTYbPWAYj1Lnnwvcoa7P38= +github.com/OperatorFoundation/go-shadowsocks2 v1.1.12 h1:dd1htkSpGAtFDg0qLALWKE93B2W6o3VhZy7wIQjs07A= +github.com/OperatorFoundation/go-shadowsocks2 v1.1.12/go.mod h1:yw8jel8UNDWkJNE3wwAfEyctdCw6DI1FWBrZgcuoBfI= +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.23/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/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= +github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63 h1:I6/SJSN9wJMJ+ZyQaCHUlzoTA4ypU5Bb44YWR1wTY/0= +github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63/go.mod h1:nf+Komq6fVP4SwmKEaVGxHTyQGKREVlwjQKpvOV39yE= +github.com/aead/ecdh v0.2.0 h1:pYop54xVaq/CEREFEcukHRZfTdjiWvYIsZDXXrBapQQ= +github.com/aead/ecdh v0.2.0/go.mod h1:a9HHtXuSo8J1Js1MwLQx2mBhkXMT6YwUmVVEY4tTB8U= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/assert/v2 v2.0.0-alpha3 h1:pcHeMvQ3OMstAWgaeaXIAL8uzB9xMm2zlxt+/4ml8lk= +github.com/alecthomas/atomic v0.1.0-alpha2 h1:dqwXmax66gXvHhsOS4pGPZKqYOlTkapELkLb3MNdlH8= +github.com/alecthomas/atomic v0.1.0-alpha2/go.mod h1:zD6QGEyw49HIq19caJDc2NMXAy8rNi9ROrxtMXATfyI= +github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 h1:8Uy0oSf5co/NZXje7U1z8Mpep++QJOldL2hs/sBQf48= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM= +github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw= +github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= +github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= +github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= +github.com/alicebob/miniredis/v2 v2.15.1/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I= +github.com/anacrolix/chansync v0.3.0 h1:lRu9tbeuw3wl+PhMu/r+JJCRu5ArFXIluOgdF0ao6/U= +github.com/anacrolix/chansync v0.3.0/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k= +github.com/anacrolix/dht/v2 v2.19.2-0.20221121215055-066ad8494444 h1:8V0K09lrGoeT2KRJNOtspA7q+OMxGwQqK/Ug0IiaaRE= +github.com/anacrolix/dht/v2 v2.19.2-0.20221121215055-066ad8494444/go.mod h1:MctKM1HS5YYDb3F30NGJxLE+QPuqWoT5ReW/4jt8xew= +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.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= +github.com/anacrolix/envpprof v1.2.1 h1:25TJe6t/i0AfzzldiGFKCpD+s+dk8lONBcacJZB2rdE= +github.com/anacrolix/go-libutp v1.2.0 h1:sjxoB+/ARiKUR7IK/6wLWyADIBqGmu1fm0xo+8Yy7u0= +github.com/anacrolix/go-libutp v1.2.0/go.mod h1:RrJ3KcaDcf9Jqp33YL5V/5CBEc6xMc7aJL8wXfuWL50= +github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= +github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= +github.com/anacrolix/log v0.10.0/go.mod h1:s5yBP/j046fm9odtUTbHOfDUq/zh1W8OkPpJtnX0oQI= +github.com/anacrolix/log v0.13.2-0.20221123232138-02e2764801c3 h1:qDcPnH18SanNZMeMuEjzKpB3NQGR1ahytV08KOhZhNo= +github.com/anacrolix/log v0.13.2-0.20221123232138-02e2764801c3/go.mod h1:MD4fn2pYcyhUAQg9SxoGOpTnV/VIdiKVYKZdCbDC97k= +github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM= +github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62/go.mod h1:66cFKPCO7Sl4vbFnAaSq7e4OXtdMhRSBagJGWgmpJbM= +github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s= +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 v1.3.0 h1:06HlMsudotL7BAELRZs0yDZ4yVXsHXGi323QBjAVASw= +github.com/anacrolix/missinggo v1.3.0/go.mod h1:bqHm8cE8xr+15uVfMG3BFui/TxyB6//H5fwlq/TeqMc= +github.com/anacrolix/missinggo/perf v1.0.0 h1:7ZOGYziGEBytW49+KmYGTaNfnwUqP1HBsy6BqESAJVw= +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.5.1/go.mod h1:WEjqh2rmKECd0t1VhQkLGTdIWXO6f6NLjp5GlMZ+6FA= +github.com/anacrolix/missinggo/v2 v2.7.0 h1:4fzOAAn/VCvfWGviLmh64MPMttrlYew81JdPO7nSHvI= +github.com/anacrolix/missinggo/v2 v2.7.0/go.mod h1:2IZIvmRTizALNYFYXsPR7ofXPzJgyBpKZ4kMqMEICkI= +github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw= +github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg= +github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc= +github.com/anacrolix/multiless v0.3.0 h1:5Bu0DZncjE4e06b9r1Ap2tUY4Au0NToBP5RpuEngSis= +github.com/anacrolix/multiless v0.3.0/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4= +github.com/anacrolix/publicip v0.2.0 h1:n/BmRxXRlOT/wQFd6Xhu57r9uTU+Xvb9MyEkLooh3TU= +github.com/anacrolix/publicip v0.2.0/go.mod h1:67G1lVkLo8UjdEcJkwScWVTvlJ35OCDsRJoWXl/wi4g= +github.com/anacrolix/stm v0.2.0/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg= +github.com/anacrolix/stm v0.4.0 h1:tOGvuFwaBjeu1u9X1eIh9TX8OEedEiEQ1se1FjhFnXY= +github.com/anacrolix/stm v0.4.0/go.mod h1:GCkwqWoAsP7RfLW+jw+Z0ovrt2OO7wRzcTtFYMYY5t8= +github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk= +github.com/anacrolix/sync v0.3.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= +github.com/anacrolix/sync v0.4.0 h1:T+MdO/u87ir/ijWsTFsPYw5jVm0SMm4kVpg8t4KF38o= +github.com/anacrolix/sync v0.4.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 v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= +github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8= +github.com/anacrolix/torrent v1.48.1-0.20230103142631-c20f73d53e9f h1:5fPzkRgj1BFYzQinFQqilCPM9A/EuPUXzSC3utjMVGc= +github.com/anacrolix/torrent v1.48.1-0.20230103142631-c20f73d53e9f/go.mod h1:PwdFzmApEr96LcqogJhuw41XOdd1oHGkp+qE9hhXyDc= +github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20200730104253-651201b0f516/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= +github.com/apache/thrift v0.0.0-20181112125854-24918abba929/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.14.2/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/aristanetworks/goarista v0.0.0-20190502180301-283422fc1708/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= +github.com/aristanetworks/goarista v0.0.0-20190628000427-15fc8b0bfcde/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= +github.com/aws/aws-sdk-go v1.30.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go-v2 v1.7.1/go.mod h1:L5LuPC1ZgDr2xQS7AmIec/Jlc7O/Y1u2KxJyNVab250= +github.com/aws/aws-sdk-go-v2/config v1.5.0/go.mod h1:RWlPOAW3E3tbtNAqTwvSW54Of/yP3oiZXMI0xfUdjyA= +github.com/aws/aws-sdk-go-v2/credentials v1.3.1/go.mod h1:r0n73xwsIVagq8RsxmZbGSRQFj9As3je72C2WzUIToc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0/go.mod h1:2LAuqPx1I6jNfaGDucWfA2zqQCYCOMCDHiCOciALyNw= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.3.2/go.mod h1:qaqQiHSrOUVOfKe6fhgQ6UzhxjwqVW8aHNegd6Ws4w4= +github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1/go.mod h1:Zy8smImhTdOETZqfyn01iNOe0CNggVbPjCajyaz6Gvg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.2.1/go.mod h1:v33JQ57i2nekYTA70Mb+O18KeH4KqhdqxTJZNK1zdRE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1/go.mod h1:zceowr5Z1Nh2WVP8bf/3ikB41IZW59E4yIYbg+pC6mw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.5.1/go.mod h1:6EQZIwNNvHpq/2/QSJnp4+ECvqIy55w95Ofs0ze+nGQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.11.1/go.mod h1:XLAGFrEjbvMCLvAtWLLP32yTv8GpBquCApZEycDLunI= +github.com/aws/aws-sdk-go-v2/service/sso v1.3.1/go.mod h1:J3A3RGUvuCZjvSuZEcOpHDnzZP/sKbhDWV2T1EOzFIM= +github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BVRASvcU7gYZB9PUgPiByXg= +github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/immutable v0.2.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= +github.com/benbjohnson/immutable v0.3.0 h1:TVRhuZx2wG9SZ0LRdqlbs9S5BZ6Y24hJEHTCgWHZEIw= +github.com/benbjohnson/immutable v0.3.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +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 h1:GKTyiRCL6zVf5wWaqKnf+7Qs6GbEPfd4iMOitWzXJx8= +github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudfoundry/gosigar v1.1.0/go.mod h1:3qLfc2GlfmwOx2+ZDaRGH3Y9fwQ0sQeaAleo2GV5pH0= +github.com/cloudfoundry/gosigar v1.2.0/go.mod h1:3qLfc2GlfmwOx2+ZDaRGH3Y9fwQ0sQeaAleo2GV5pH0= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/siphash v1.2.1 h1:4cLinnzVJDKxTCl9B01807Yiy+W7ZzVHj/KIroQRvT4= +github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= +github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= +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 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72 h1:XiR1YwcWcRFzxjAhWK29HQL4nocj0QWJjpeRi/YASV0= +github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= +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/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/felixge/httpsnoop v1.0.0/go.mod h1:3+D9sFq0ahK/JeJPhCBUV1xlf4/eIYrUQaxulT0VzX8= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/getlantern/appdir v0.0.0-20160830121117-659a155d06e8/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= +github.com/getlantern/appdir v0.0.0-20180320102544-7c0f9d241ea7/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= +github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9 h1:IJKppG1QLU1rqbcwWG6YEMVB/QRzz+aUSXQDX5+Lsts= +github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9/go.mod h1:HMPEgWG0J3goTYFWoTohloqZ3BQywXMElZnd9EROxxU= +github.com/getlantern/borda v0.0.0-20220308134056-c4a5602f778e h1:mPtGf92RlHVeFsGNgVe0e6mIQS6uqymX++kDqRLrzL0= +github.com/getlantern/borda v0.0.0-20220308134056-c4a5602f778e/go.mod h1:h/CNT4zYivoVZTnY3Yi/XkQCA2hlemWLjMEzKbIf5K4= +github.com/getlantern/broflake v0.0.0-20230330150844-7307935f5abb h1:LUpwcQ63ub+mLbaledZTUj2+rQlBl1nfux49IE6biVE= +github.com/getlantern/broflake v0.0.0-20230330150844-7307935f5abb/go.mod h1:SPiKfQMLFzxQIBM2Z8sgp3tg/oP2molr3HsF2vAORpQ= +github.com/getlantern/bufconn v0.0.0-20190625204133-a08544339f8d/go.mod h1:d6O4RY+V87kIt4o9wru4SaNo7C2NAkD3YnmJFXEpODo= +github.com/getlantern/bufconn v0.0.0-20210901195825-fd7c0267b493 h1:8WjDNmpDLFVsAfcnHxqF4pfVKkdAQxyJ9iCHB4LxSfc= +github.com/getlantern/bufconn v0.0.0-20210901195825-fd7c0267b493/go.mod h1:d6O4RY+V87kIt4o9wru4SaNo7C2NAkD3YnmJFXEpODo= +github.com/getlantern/bytecounting v0.0.0-20190530140808-3b3f10d3b9ab h1:bKsTXN1XgjiWuciuEChVIPFXWD8sTASsvjkMAGMEb/4= +github.com/getlantern/bytecounting v0.0.0-20190530140808-3b3f10d3b9ab/go.mod h1:O/UvKlcgUd/tsplTbFesvYtqGENHVE/yO8DJ1sd+x+g= +github.com/getlantern/byteexec v0.0.0-20170405023437-4cfb26ec74f4/go.mod h1:4WCQkaCIwta0KlF9bQZA1jYqp8bzIS2PeCqjnef8nZ8= +github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd h1:0xt9OTbV50a/+ZarMcr86ybWiN1v+bbwzdnVuXHzR/o= +github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd/go.mod h1:oD9q9NB1LNBLHk3WAwza4tivxV7tm7jKFlCNCAv3+M8= +github.com/getlantern/bytemap v0.0.0-20210122162547-b07440a617f0/go.mod h1:o01y9zxAVkFLqhZjC+mFXsN4NdxQG44Ff/nH1W4SuvI= +github.com/getlantern/cmux v0.0.0-20230301223233-dac79088a4c0 h1:JlVdpDQThkcqlMoqpn89ZfNUpxNTUNqUrTFacBJvIqU= +github.com/getlantern/cmux v0.0.0-20230301223233-dac79088a4c0/go.mod h1:48COjs7jITfhkdw82LeMDQtrISx0CQG3/W0Ycr2UafM= +github.com/getlantern/cmux/v2 v2.0.0-20200905031936-c55b16ee8462/go.mod h1:oJz1ghfzM796DpGP0et6Gbc3si2Zn3/7l7KxxK/KXQ0= +github.com/getlantern/cmux/v2 v2.0.0-20230228131144-addc208d233b h1:wdB3MA0/9x0Z0cwmQWx3oJjPF0T2+E0gS9vtZzT1tic= +github.com/getlantern/cmux/v2 v2.0.0-20230228131144-addc208d233b/go.mod h1:oJz1ghfzM796DpGP0et6Gbc3si2Zn3/7l7KxxK/KXQ0= +github.com/getlantern/cmuxprivate v0.0.0-20211216020409-d29d0d38be54 h1:aqzgkWfjRLDSIpTKU3x4a8MtqpRi5Jr2pt81Ga0moJQ= +github.com/getlantern/cmuxprivate v0.0.0-20211216020409-d29d0d38be54/go.mod h1:WIunQ/nFvkQAP89tY2CX4R5kj9A1OJhjA3KmP6nj4o4= +github.com/getlantern/common v1.2.0 h1:+Xm0FTLrrX7hSi2UQ4Ys+p9Jrlx8TK44HuqreZN/XtA= +github.com/getlantern/common v1.2.0/go.mod h1:0SEJgqSudY1N0PP012aNY2raInQVUeXOp08VGrjtuOU= +github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= +github.com/getlantern/context v0.0.0-20220418194847-3d5e7a086201 h1:oEZYEpZo28Wdx+5FZo4aU7JFXu0WG/4wJWese5reQSA= +github.com/getlantern/context v0.0.0-20220418194847-3d5e7a086201/go.mod h1:Y9WZUHEb+mpra02CbQ/QczLUe6f0Dezxaw5DCJlJQGo= +github.com/getlantern/elevate v0.0.0-20180207094634-c2e2e4901072/go.mod h1:T4VB2POK13lsPLFV98WJQrL7gAXYD9TyJxBU2P8c8p4= +github.com/getlantern/elevate v0.0.0-20200430163644-2881a121236d/go.mod h1:+nYKXAqGigcDHB3as7WikMzg3eIHzGUbLnBKOCBJeUE= +github.com/getlantern/elevate v0.0.0-20220903142053-479ab992b264 h1:q50MSzoIIKotG7apUYaDME/bNGhOJMjG33Fpfc7KPWM= +github.com/getlantern/elevate v0.0.0-20220903142053-479ab992b264/go.mod h1:2VB8zy/kMNX347i5fdusJbPNAZE26u8qoHJDy7CWP9A= +github.com/getlantern/ema v0.0.0-20190620044903-5943d28f40e4 h1:PMK8QQn9GLTQXdHnqoNhyToOa8snagaZVt9Xb36NEUc= +github.com/getlantern/ema v0.0.0-20190620044903-5943d28f40e4/go.mod h1:tzRwT19aDrWSr6yRDs8iOvaXXCau96EgWsgGT9wIpoQ= +github.com/getlantern/enhttp v0.0.0-20210901195634-6f89d45ee033 h1:HbjEpFFiRYcySVkFMdn3kl3OUU0UZwMdcXzY5gXUEQo= +github.com/getlantern/enhttp v0.0.0-20210901195634-6f89d45ee033/go.mod h1:kHP/nfmHj9HJVN5Cb+1RFNRLR0O0nx40YENc4wKIe6s= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= +github.com/getlantern/errors v1.0.1/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= +github.com/getlantern/errors v1.0.3 h1:Ne4Ycj7NI1BtSyAfVeAT/DNoxz7/S2BUc3L2Ht1YSHE= +github.com/getlantern/errors v1.0.3/go.mod h1:m8C7H1qmouvsGpwQqk/6NUpIVMpfzUPn608aBZDYV04= +github.com/getlantern/eventual v0.0.0-20180125201821-84b02499361b/go.mod h1:O8T3zFEcY6+LRXFcVV4q8mEu2tDIixG8edC84DfswBc= +github.com/getlantern/eventual v1.0.0 h1:q56jlZhiDeWvdrc0QJ12AaWqcu/Z67wDDjdAUKGnYqc= +github.com/getlantern/eventual v1.0.0/go.mod h1:xL9T/pQI7i44INFSsKf4zDNz5bXA7P18j1cNd5qy/yI= +github.com/getlantern/eventual/v2 v2.0.2 h1:7b3N2oQBVqSHwm/8u7C8b6W+OkkjgZSmwUc1AdIkrHc= +github.com/getlantern/eventual/v2 v2.0.2/go.mod h1:o1VZHRk8UArBra+pwPSi23WrahBG4qgg4/ew6Mmlq84= +github.com/getlantern/fdcount v0.0.0-20170105153814-6a6cb5839bc5/go.mod h1:XZwE+iIlAgr64OFbXKFNCllBwV4wEipPx8Hlo2gZdbM= +github.com/getlantern/fdcount v0.0.0-20190912142506-f89afd7367c4/go.mod h1:XZwE+iIlAgr64OFbXKFNCllBwV4wEipPx8Hlo2gZdbM= +github.com/getlantern/fdcount v0.0.0-20210503151800-5decd65b3731 h1:v+vJ3LgV4nW4xRPZo+xkADDflXLpRbG+Lv69XKWFjTQ= +github.com/getlantern/fdcount v0.0.0-20210503151800-5decd65b3731/go.mod h1:XZwE+iIlAgr64OFbXKFNCllBwV4wEipPx8Hlo2gZdbM= +github.com/getlantern/filepersist v0.0.0-20160317154340-c5f0cd24e799/go.mod h1:8DGAx0LNUfXNnEH+fXI0s3OCBA/351kZCiz/8YSK3i8= +github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c h1:mcz27xtAkb1OuOLBct/uFfL1p3XxAIcFct82GbT+UZM= +github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c/go.mod h1:8DGAx0LNUfXNnEH+fXI0s3OCBA/351kZCiz/8YSK3i8= +github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede h1:yrU6Px3ZkvCsDLPryPGi6FN+2iqFPq+JeCb7EFoDBhw= +github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede/go.mod h1:nhnoiS6DE6zfe+BaCMU4YI01UpsuiXnDqM5S8jxHuuI= +github.com/getlantern/fronted v0.0.0-20221102104652-893705395782 h1:Fjzra0nFtIqHLCnUA4XiSa+gFCmpi4/xe8vLAH1dN+U= +github.com/getlantern/fronted v0.0.0-20221102104652-893705395782/go.mod h1:ZpmjHlwWN5sj3ViISNvvv4okVCuxTPBp7FedT+MO3w0= +github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822 h1:DhGGljbbvnXmBhh11b2MLTrkdkSIROy5Op1eylsM74U= +github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822/go.mod h1:Xw0BLEMmlFOQ1FCBqqWfYEhc2Ss6V4S/56U0oKH/QFU= +github.com/getlantern/geolookup v0.0.0-20210901195705-eec711834596 h1:K1d+3ZrUattlZ4F/76XWuAfSkVqGCBKhG6NU0UhxjFA= +github.com/getlantern/geolookup v0.0.0-20210901195705-eec711834596/go.mod h1:C4lSABOxuIeQi36iYsO7xrcBzLDNeeB/nPVqYbHEnbo= +github.com/getlantern/go-cache v0.0.0-20141028142048-88b53914f467 h1:10ez8C+7zyHzmnIiYybx9Qji/zO2tAAde69DfJMbUKY= +github.com/getlantern/go-cache v0.0.0-20141028142048-88b53914f467/go.mod h1:IQND0fl/mdTYNICpN/eDYKX+j90TqQYXdpNFWkJpCPs= +github.com/getlantern/goexpr v0.0.0-20211215215226-4cdd4fd2847b/go.mod h1:ZaY9C4jtM37dI+XfwuKqKIdVQAdeQPIiFtwBMN/TSY4= +github.com/getlantern/golog v0.0.0-20190809085441-26e09e6dd330/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= +github.com/getlantern/golog v0.0.0-20200929154820-62107891371a/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA= +github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA= +github.com/getlantern/golog v0.0.0-20210606115803-bce9f9fe5a5f/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA= +github.com/getlantern/golog v0.0.0-20230206140254-6d0a2e0f79af h1:cvD5qCZpH/Q32Ae0i1W1lRkVuM21czEZaJpTuRiJjc4= +github.com/getlantern/golog v0.0.0-20230206140254-6d0a2e0f79af/go.mod h1:+ZU1h+iOVqWReBpky6d5Y2WL0sF2Llxu+QcxJFs2+OU= +github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb h1:tDQA66mL1vTHKSMu3Ras/9Tk884ipPAhcdQHXpnDhxg= +github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb/go.mod h1:ysiamkJHyOrnlNmtDCCccH1NbFdgEBSJRg44DWiOxcY= +github.com/getlantern/goproxy v0.0.0-20220805074304-4a43a9ed4ec6 h1:/jwJjghYGhLhpPYmO4IyHLG+VMVVZaIdgp8oe1dSx6E= +github.com/getlantern/goproxy v0.0.0-20220805074304-4a43a9ed4ec6/go.mod h1:96OPoioYRaknNbHjFa4+itGZIJMnJ7wiQB2nz2q1h5Y= +github.com/getlantern/gotun v0.0.0-20190809092752-6d35bb1397ee/go.mod h1:zvsZQrsl7Yrmi+ENk5WZFT7dQaYtihAcI0H/9+LacqQ= +github.com/getlantern/grtrack v0.0.0-20160824195228-cbf67d3fa0fd/go.mod h1:RkQEgBdrJCH5tYJP2D+a/aJ216V3c9q8w/tCJtEiDoY= +github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac h1:WsJhOWm1hJEAqts1OAhEPctQpy7Y0Eiu05mV84ixekc= +github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac/go.mod h1:RkQEgBdrJCH5tYJP2D+a/aJ216V3c9q8w/tCJtEiDoY= +github.com/getlantern/hellosplitter v0.1.1 h1:eV01w6T9Ca7wjctte71hNBST+lsbSGKf82yxSed3XJ4= +github.com/getlantern/hellosplitter v0.1.1/go.mod h1:8TgRrwnkkz8PNiqMQVOorGtmIBXBSj7YrRCuDP8NXLg= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o= +github.com/getlantern/hex v0.0.0-20220104173244-ad7e4b9194dc h1:sue+aeVx7JF5v36H1HfvcGFImLpSD5goj8d+MitovDU= +github.com/getlantern/hex v0.0.0-20220104173244-ad7e4b9194dc/go.mod h1:D9RWpXy/EFPYxiKUURo2TB8UBosbqkiLhttRrZYtvqM= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= +github.com/getlantern/hidden v0.0.0-20201229170000-e66e7f878730/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= +github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770 h1:cSrD9ryDfTV2yaur9Qk3rHYD414j3Q1rl7+L0AylxrE= +github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770/go.mod h1:GOQsoDnEHl6ZmNIL+5uVo+JWRFWozMEp18Izcb++H+A= +github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049 h1:jnXDyEMgPDUjzCzmqhIsBqyLvmVOazOTxGQ0SzIc8F0= +github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049/go.mod h1:zsMtNKXEfy+y3RBqe3wcd05VivKAswrIvlVsFrj7Fwk= +github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230410110826-dfa8d257b655 h1:HrvRUXPx2dZKat16QeyT0o1kz1+MERhVrFbIMy+m6p0= +github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230410110826-dfa8d257b655/go.mod h1:gDJqOgqf8Qg70e4hhf8traNZbIt14QLdqh4eb41pxEY= +github.com/getlantern/idletiming v0.0.0-20190529182719-d2fbc83372a5/go.mod h1:MGP8kEgZGgAhvHISt0hJGQgxg/VAqGdw3+kSZBnfC/4= +github.com/getlantern/idletiming v0.0.0-20200228204104-10036786eac5/go.mod h1:McaLC6faRlxJ9QjjqSjpEeYIjKnKA8+dzjoR+eYXCio= +github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e h1:b0VWlP1TB369RANq5GnV76sGDm98eQwVJaaoH8OXOmw= +github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e/go.mod h1:McaLC6faRlxJ9QjjqSjpEeYIjKnKA8+dzjoR+eYXCio= +github.com/getlantern/iptool v0.0.0-20210721034953-519bf8ce0147/go.mod h1:hfspzdRcvJ130tpTPL53/L92gG0pFtvQ6ln35ppwhHE= +github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696 h1:D7wbL2Ww6QN5SblEDMiQcFulqz2jgcvawKaNBTzHLvQ= +github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696/go.mod h1:hfspzdRcvJ130tpTPL53/L92gG0pFtvQ6ln35ppwhHE= +github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42 h1:h/VSx9E2MCHR/dSqwQmcRSGI+VSCFwuu4AcSMpXJ2Pg= +github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42/go.mod h1:zwtJ4plEkFdyAcFfiY7ia++fludxUHZ3GBlyP1SDk4c= +github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54 h1:JqIiaDpL6CLgkq9Mfyd7GXSFm8EvgG0mVUd6I7TxNfw= +github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54/go.mod h1:KFBWdR0PdEQK0JtGcE1lhAoYFVTRxWDFfYBARPb0t9Q= +github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966 h1:2JIEmUghZ9chENs5JmcHahPDioC5U8ZHLQKJRlfKUpM= +github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966/go.mod h1:RZpRkvvJxOFO4NsrUBalcGGioaG84GZT/0UURXEfIhY= +github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89 h1:gjlTAADW8ZUrIey+u1ZtbVlI91bqI0Bu+GBxvRlBBqo= +github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89/go.mod h1:EtJEobtQH/HiQsZLyRjlrnq/fu7vfgnTMzhbmUqkZ3M= +github.com/getlantern/keyman v0.0.0-20180207174507-f55e7280e93a/go.mod h1:FMf0g72BHs14jVcD8i8ubEk4sMB6JdidBn67d44i3ws= +github.com/getlantern/keyman v0.0.0-20200819205636-76fef27c39f1/go.mod h1:FMf0g72BHs14jVcD8i8ubEk4sMB6JdidBn67d44i3ws= +github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c h1:42BHUoilinoKRbOvTsWBY9nr1+Y2cAxK7BkMdmIMvlM= +github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c/go.mod h1:lzCwzxjE8ciu+2bZku7kcCKfOYAXUs4stPn3elouYNI= +github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a h1:z7G1v79GB1qRrkcbzF0nrLzV/+dwdGmamEZAp0ff+z0= +github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a/go.mod h1:cGOfTjvllC9bcwS7cVW6tGT6fXc8Dki384uFjm7XBnw= +github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93 h1:NsoNGY9DzwUWXpNWfc3H8Vheo7QgIZtQ0wERopWbi9k= +github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93/go.mod h1:Wwa1uDdu6LxVRANcN2dQ+aNI0rY+km+dqHW2G9Qm34k= +github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d h1:eHNQIN0hHuDN0lqQDrMu+CRpB9YOK3tj5deI5gz16c4= +github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d/go.mod h1:i+mWXWdQz4iUyxh8ib+/tJVDwT5X3h58jbI7yX356Kg= +github.com/getlantern/measured v0.0.0-20170302221919-0582bf799783/go.mod h1:5OW2WJitCKExpSw2bploW2fM7PjOd6QnLqyp+IqToqU= +github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be h1:rfdOTeKew6zcpf5BQ566WInLINdZARimtWVLcgP/a4I= +github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be/go.mod h1:QG6d9+nAxD1PjVjgGLUUHPZBQUp20/h7j8a3kxd/8Rc= +github.com/getlantern/mitm v0.0.0-20180205214248-4ce456bae650/go.mod h1:jmIVbVxSVLdeY5hlD+6chiOR/9CdzPjVgIIQphviCl0= +github.com/getlantern/mitm v0.0.0-20210622063317-e6510574903b h1:qwwHF+YUqsM2rMVfzptcfsEGW4y7NAcFOhKoAWLmb+I= +github.com/getlantern/mitm v0.0.0-20210622063317-e6510574903b/go.mod h1:chGLTBaCheavOG9k+IjbjTrXEL3Sszz1MWzqZR5M5nE= +github.com/getlantern/mockconn v0.0.0-20190708122800-637bd46d8034/go.mod h1:+F5GJ7qGpQ03DBtcOEyQpM30ix4BLswdaojecFtsdy8= +github.com/getlantern/mockconn v0.0.0-20191023022503-481dbcceeb58/go.mod h1:+F5GJ7qGpQ03DBtcOEyQpM30ix4BLswdaojecFtsdy8= +github.com/getlantern/mockconn v0.0.0-20200818071412-cb30d065a848 h1:2MhMMVBTnaHrst6HyWFDhwQCaJ05PZuOv1bE2gN8WFY= +github.com/getlantern/mockconn v0.0.0-20200818071412-cb30d065a848/go.mod h1:+F5GJ7qGpQ03DBtcOEyQpM30ix4BLswdaojecFtsdy8= +github.com/getlantern/msgpack v3.1.4+incompatible h1:/XyJ9HTt8W31F6DjgOv+Nk+qKeKcv9kxp6hOww4pj1k= +github.com/getlantern/msgpack v3.1.4+incompatible/go.mod h1:mUNR5C/x5E/8Jb8gU/lQd/ytwpKDhUvmGUj0STqInhc= +github.com/getlantern/mtime v0.0.0-20170117193331-ba114e4a82b0/go.mod h1:u537FS7ld4Whf7h7/0ql/myAudWWBNgeRhgE9XXH4Pk= +github.com/getlantern/mtime v0.0.0-20200228202836-084e1d8282b0/go.mod h1:GfzwugvtH7YcmNIrHHizeyImsgEdyL88YkdnK28B14c= +github.com/getlantern/mtime v0.0.0-20200417132445-23682092d1f7 h1:03J6Cb42EG06lHgpOFGm5BOax4qFqlSbSeKO2RGrj2g= +github.com/getlantern/mtime v0.0.0-20200417132445-23682092d1f7/go.mod h1:GfzwugvtH7YcmNIrHHizeyImsgEdyL88YkdnK28B14c= +github.com/getlantern/multipath v0.0.0-20220920195041-55195f38df73 h1:nRyc0NS4ViqrjxD7WcwbOnKC2kEThjJm+JUCiaDdkXY= +github.com/getlantern/multipath v0.0.0-20220920195041-55195f38df73/go.mod h1:uzxEbpNdIj+Iw9lEVuY1HF3OdAJ4RJykQHSL8lPee4M= +github.com/getlantern/nettest v1.0.0 h1:xg8vq9JrGzrFGFkFGwZwIJ5+kwtvyqNDIADwrANvhQg= +github.com/getlantern/nettest v1.0.0/go.mod h1:8wY0QwrdpkayCBQXjhZoJuwu2IHfp4UErrxgwaJ2UM4= +github.com/getlantern/netx v0.0.0-20190110220209-9912de6f94fd/go.mod h1:wKdY0ikOgzrWSeB9UyBVKPRhjXQ+vTb+BPeJuypUuNE= +github.com/getlantern/netx v0.0.0-20210803075350-eb4fa6261e47/go.mod h1:g7yY/ImU8M+7lS09wVG3GTsxNvtPMTvkeWZVfxowtMo= +github.com/getlantern/netx v0.0.0-20211206143627-7ccfeb739cbd h1:z5IehLDMqMwJ0oeFIaMHhySRU8r1lRMh7WQ0Wn0LioA= +github.com/getlantern/netx v0.0.0-20211206143627-7ccfeb739cbd/go.mod h1:WEXF4pfIfnHBUAKwLa4DW7kcEINtG6wjUkbL2btwXZQ= +github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/ops v0.0.0-20220713155959-1315d978fff7 h1:Od0xvR4iK3gZwhkIbxnHw4Teusv+n5G/F9dW7x+C2f0= +github.com/getlantern/ops v0.0.0-20220713155959-1315d978fff7/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/osversion v0.0.0-20230221120431-d6f9971f8ccf h1:eBrN3ukzZnzTvKA5pf4Kh2bqRxUVzxKiga453r/S1wk= +github.com/getlantern/osversion v0.0.0-20230221120431-d6f9971f8ccf/go.mod h1:m3uzMz4/vMTlZEIP3aQL0wjpSFblQsuNcgMZpfRgmos= +github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360 h1:pijUoofaQcAM/8zbDzZM2LQ90kGVbKfnSAkFnQwLZZU= +github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360/go.mod h1:nsJPNYUSY96xB+p7uiDW8O4uiKea+KjeUdS5d6tf9IU= +github.com/getlantern/preconn v0.0.0-20180328114929-0b5766010efe/go.mod h1:FvIxQD61iYA42UjaJyzGl9DNne8jbowbgicdeNk/7kE= +github.com/getlantern/preconn v1.0.0 h1:DsY3l/y/BJUj86WyaxXylbJnCC9QbKcc3D6js6rFL60= +github.com/getlantern/preconn v1.0.0/go.mod h1:i/AnXvx715Fq7HgZLlmQlw3sGfEkku8BQT5hLHMK4+k= +github.com/getlantern/probe v0.0.0-20191107230642-ed284e08029a/go.mod h1:EPE0nd9YNS2FTIz+2EOkqojCuqaQlJ+fTiLPklsqe/E= +github.com/getlantern/probe v0.0.0-20211216020459-69afa01c1c5c h1:bWusw8SYvl/iq+nHzSIe4oC7HdwaCN0KQEZkIHimamM= +github.com/getlantern/probednet v0.0.0-20190725133252-1cfdb2354b4d/go.mod h1:7sl7hPjPDAqXyxVx7mhrKfvb4oCX/ROhcs16w2EhWX8= +github.com/getlantern/probednet v0.0.0-20211216020507-22fd9c1d3bf6 h1:8jg6OehdQr90Ybmyc68raXEqM/1hk8E7F2YAUfmcvzE= +github.com/getlantern/proxy/v2 v2.0.0/go.mod h1:jU6qNaMq92qDY0slT9afuER7arXLnh7jU+DTg3W/oDs= +github.com/getlantern/proxy/v2 v2.0.1-0.20220303164029-b34b76e0e581 h1:7NrSoq9ce/n15O+0smA756lo86c+coYoyGAhefRJCPw= +github.com/getlantern/proxy/v2 v2.0.1-0.20220303164029-b34b76e0e581/go.mod h1:81jIwwI/5NGYj2CSvbsZapcTe87jd6AeEu6yJD1NKIg= +github.com/getlantern/psmux v1.5.15-0.20200903210100-947ca5d91683 h1:Asfm7ajzavuSZC+5b+tPwXwyvlw188NM9hKM7wNMNGg= +github.com/getlantern/psmux v1.5.15-0.20200903210100-947ca5d91683/go.mod h1:GtXRvtMItoflWGLPE7GNq+AdL7BnmpaaNLtDQVD1XHU= +github.com/getlantern/quic-go v0.31.1-0.20230104154904-d810c964a217 h1:UXxafrjMrl4j1d2/Ajjv91T2QHR1lsMnL8ofCYqNjNA= +github.com/getlantern/quic-go v0.31.1-0.20230104154904-d810c964a217/go.mod h1:0wFbizLgYzqHqtlyxyCaJKlE7bYgE6JQ+54TLd/Dq2g= +github.com/getlantern/quicproxy v0.0.0-20220808081037-32e9be8ec447 h1:4Fg+1ghYOJfoD4leM0n3ze+SAnpDeQ6EqXtIfm83dwQ= +github.com/getlantern/quicproxy v0.0.0-20220808081037-32e9be8ec447/go.mod h1:LOb27iGUxgV4WM7gZVUawhbMgoEOKI5iuR6ssav7Zik= +github.com/getlantern/quicwrapper v0.0.0-20230124133216-09e62d6a4ff2 h1:mV2jysb8uosKdbQYRqusw1Kje2bzLZJBShO0tW/VaAM= +github.com/getlantern/quicwrapper v0.0.0-20230124133216-09e62d6a4ff2/go.mod h1:XQq0XZppAHAeHK5cPzNNPdmhBYyTgAxcgT5jXxh50P8= +github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7 h1:47FJ5kTeXc3I1VPpi2hWW9I16/Y3K0cpUq/B7oWJGF8= +github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7/go.mod h1:OOqKCIkspqXtIWEex4uhH1H9l7NGekT9i3Hs591ZDk4= +github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c h1:IkjF+RwRs8B/RsuD638eUFO2K/227OO2B1FLXGp17Ro= +github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c/go.mod h1:kExwbqTx1krUnT9ohmXG3jayDTEBfxUKeoRzU6XucLw= +github.com/getlantern/redis-utils v0.0.0-20210823133122-d4f0e525e095/go.mod h1:1X9DhzvePQ89WjJRzY2DA5Xpgi7jI0i5E0rFjYxgPWI= +github.com/getlantern/rotator v0.0.0-20160829164113-013d4f8e36a2/go.mod h1:Ap+QTDJeA24+0jjPHReq/LyP3ugEEDYvncluEgsm60A= +github.com/getlantern/sqlparser v0.0.0-20171012210704-a879d8035f3c/go.mod h1:wGjYYh1vSkRes1bNy+zio7cmmI9cLbST+H8eqnt5Mg4= +github.com/getlantern/telemetry v0.0.0-20230227190802-faa666d3b3d5 h1:EdaJj4wmwoGQ/xHAk5EEe1WU8Rr1Ge+DsGs2MBZNKhc= +github.com/getlantern/telemetry v0.0.0-20230227190802-faa666d3b3d5/go.mod h1:XxsxSO8KjFsvteOwK4tw/ug8oAjAA4lcoADUFFFdpiE= +github.com/getlantern/testify v0.0.0-20160317154340-2eeb3906e78f h1:R6iv+VzCrbxlBm2TcgyJi9c7tQguNXi9JmIvuUJKrdc= +github.com/getlantern/testify v0.0.0-20160317154340-2eeb3906e78f/go.mod h1:uKKI9HSwZ4C8tx1vV+ovbG32Lw9LixtzPLNiS8U/ddA= +github.com/getlantern/testredis v0.0.0-20210610142259-c0995d455766/go.mod h1:f57SFFLkB+WLz10IoqovqksV6fTK91SuweVS21OEkdc= +github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9 h1:VTNjZxSuAHUzu13lYpEVB8gc3xz5hZePGNHG5enHYLY= +github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9/go.mod h1:7uvbzuoOr3uYGHZx5QWlI8/C52XEf/aTb/tJFEe41Ak= +github.com/getlantern/tinywss v0.0.0-20211216020538-c10008a7d461 h1:3HOWV/uUGde6whvG7aoxIQlL43jHkmPupJsDCA569u0= +github.com/getlantern/tinywss v0.0.0-20211216020538-c10008a7d461/go.mod h1:ZLyPOKtNWU4vWnAiRiNQ7hbfLMqCEuj1DgQWBtHp7tQ= +github.com/getlantern/tlsdefaults v0.0.0-20171004213447-cf35cfd0b1b4 h1:73U3J4msGw3cXeKtCEbY7hbOdD6aX8gJv8BOu+VagF8= +github.com/getlantern/tlsdefaults v0.0.0-20171004213447-cf35cfd0b1b4/go.mod h1:f8WmDYKFOaC5/y0d3GWl6UKf1ZbSlIoMzkuC8x7pUhg= +github.com/getlantern/tlsdialer/v3 v3.0.3 h1:OXzzAqO8YojBOu2Kk8wquX2zbFmgJjji41RpaT6knLg= +github.com/getlantern/tlsdialer/v3 v3.0.3/go.mod h1:hwA0X81pnrgx7GEwddaGWSxqr6eLBm7A0rrUMK2J7KY= +github.com/getlantern/tlsmasq v0.4.7-0.20230302000139-6e479a593298 h1:GxhCQ6zLnIeaIw2gtZsM7hSlpXHdd8DoXSEPObSHMuk= +github.com/getlantern/tlsmasq v0.4.7-0.20230302000139-6e479a593298/go.mod h1:vcDVZe3TGEqd0nD0tVvqKoyGHY+5bPxCa+IklxroKd0= +github.com/getlantern/tlsresumption v0.0.0-20211216020551-6a3f901d86b9 h1:onWhy3gmWhoeNEdHI/e2q39d5ab7Giwa5j93ZDsFUOw= +github.com/getlantern/tlsresumption v0.0.0-20211216020551-6a3f901d86b9/go.mod h1:HsendE/ereHNDfzgO2DcEDSlPF4aDZ9aIMSKgWKa9dc= +github.com/getlantern/tlsutil v0.2.0/go.mod h1:Vxsyr9DVnYwsqHaEzMYkg9fT8aBrnO2eI+gdICMQbQU= +github.com/getlantern/tlsutil v0.5.3 h1:g1FjuG4/OTZe8kkbEmpSxvT9rXzYOG9jO4jHiDeQIxM= +github.com/getlantern/tlsutil v0.5.3/go.mod h1:lVgvr4nxuQ1ocOho90UB6LnHFlpP16TXAGpHR8Z0QnI= +github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad h1:F7Pl+9tS7QtyCzL7hD70pm4jpSiJp/pCn25d2BQ/xow= +github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad/go.mod h1:ZZCjqcZBEc+UK2hjZf3saA3Hiw2z2CXTTF6r4tu0+i0= +github.com/getlantern/utls v0.0.0-20221011213556-17014cb6fc4a h1:A12K3qOcLk8kwp+NB7OonNskzaYA+tIXvTPuk0Gor6I= +github.com/getlantern/utls v0.0.0-20221011213556-17014cb6fc4a/go.mod h1:xleouNszTteqmcvv1JZiPuBY+MnTh/xV34mi0HYmiqk= +github.com/getlantern/uuid v1.1.2-0.20190507182000-5c9436b8c718/go.mod h1:uX10hOzZUUDR+oYNSIks+RcozOEiwTNC/K2rw9SUi1k= +github.com/getlantern/uuid v1.2.0 h1:pGrGaCV7XEaG6lvjWkwf8Y92BjB/9yFmkKsNFpRQ7rc= +github.com/getlantern/uuid v1.2.0/go.mod h1:uX10hOzZUUDR+oYNSIks+RcozOEiwTNC/K2rw9SUi1k= +github.com/getlantern/vtime v0.0.0-20160810174823-dc1e573cf991/go.mod h1:Sfa815JjnYX/fxcE/nHKxyanK/2Iy+6FbMO4/ou3gWw= +github.com/getlantern/waitforserver v1.0.1 h1:xBjqJ3GgEk9JMWnDgRSiNHXINi6Lv2tGNjJR0hCkHFY= +github.com/getlantern/waitforserver v1.0.1/go.mod h1:K1oSA8lNKgQ9iC00OFpMfMNm4UMrsxoGCdHf0NT9LGs= +github.com/getlantern/wal v0.0.0-20220217194315-e4eac848dbd1/go.mod h1:emAPVd2NRdPkbqAInyWVD6s/AltbTRvKdHXlEhDXX4M= +github.com/getlantern/withtimeout v0.0.0-20160829163843-511f017cd913 h1:YK3YNyTsa+1BPWOoN0F79rrjHyfNx4MAoFEvzwQU+dY= +github.com/getlantern/withtimeout v0.0.0-20160829163843-511f017cd913/go.mod h1:bwttrA0oacoHdL476F60prypY1oC++WLtVexumgZozY= +github.com/getlantern/yaml v0.0.0-20190801163808-0c9bb1ebf426 h1:lb2OElfhZzfgvNQym79ONvv4yvDh/gShHkLQI6qzriA= +github.com/getlantern/yaml v0.0.0-20190801163808-0c9bb1ebf426/go.mod h1:SoTXbOvaDC1bH3QrlkU5kz/h12tU/hN54wSMUCdgEXs= +github.com/getlantern/zenodb v0.0.0-20220217194355-df46cc148a8c/go.mod h1:711qYcNux6PYvLgAG/YxKSlaTgASfgXkAhaSgvOKbW8= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw= +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/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-redis/redis/v8 v8.10.0/go.mod h1:vXLTvigok0VtUX0znvbcEW1SOt4OA9CU1ZfnOtKOaiM= +github.com/go-redis/redis/v8 v8.11.3/go.mod h1:xNJ9xDG09FsIPwh3bWdk+0oDWHbtF9rPN0F/oD9XeKc= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +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-20180823221919-9d8ff1c67be5/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= +github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 h1:KRMr9A3qfbVM7iV/WcLY/rL5LICqwMHLhwRXKu99fXw= +github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +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/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +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/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf h1:ukIp7SJ4RNEkyqdn8EZDzUTOsqWUbHnwPGU3d8pc7ok= +github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5 h1:YEwYZI2QOW/49JC7hb5X5irk1J4BJc6Q37OnahdSuek= +github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2 h1:GUSkTcIe1SlregbHNUKbYDhBsS8lNgYfIp4S4cToUyU= +github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571 h1:7ARdo5TcdMorNtejbaqYDEcsqOdPf3iAoUIeoMhvu7E= +github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece h1:dXIQoswVYAQd8m2jqYdxKn2lCkLlcZfSyu66k6akgis= +github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29 h1:Aj+poYy0aVF2abLrHVN2aAxynAGg2AO8VtIJKSnmxMA= +github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4 h1:ljlDrxv0Wij8s9+WEYGswFmz/SEg75X832pYRsYA56Y= +github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= +github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= +github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3 h1:mpL/HvfIgIejhVwAfxBQkwEjlhP5o0O9RAeTAjpwzxc= +github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +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/gorilla/mux v1.7.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2 h1:ERKrevVTnCw3Wu4I3mtR15QU3gtWy86cBo6De0jEohg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2/go.mod h1:chrfS3YoLAlKTRE5cFWvCbt8uGAjshktT4PveTUpsFQ= +github.com/hashicorp/go-uuid v0.0.0-20180228145832-27454136f036/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +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.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jcmturner/gofork v0.0.0-20180107083740-2aebee971930/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmcvetta/randutil v0.0.0-20150817122601-2bb1b664bcff/go.mod h1:ddfPX8Z28YMjiqoaJhNBzWHapTHXejnB5cDCUWDwriw= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4 h1:nwOc1YaOrYJ37sEBrtWZrdqzK22hiJs3GpDmP3sR2Yw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +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/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kataras/golog v0.1.7 h1:0TY5tHn5L5DlRIikepcaRR/6oInIr9AiWsxzt0vvlBE= +github.com/kataras/pio v0.0.10 h1:b0qtPUqOpM2O+bqa5wr2O6dN4cQNwSmFd6HQqgVae0g= +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.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= +github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2GHND54= +github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +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/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= +github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/mailgun/oxy v0.0.0-20180330141130-3a0f6c4b456b h1:dmBN8/lJNk0O/ZcwlxVGr4/1g0KoiLeDpfY9uGnT8fY= +github.com/marten-seemann/qtls-go1-18 v0.1.3 h1:R4H2Ks8P6pAtUagjFty2p7BVHn3XiwDAl7TTQf5h7TI= +github.com/marten-seemann/qtls-go1-18 v0.1.3/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= +github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sNlqWoDZnjRIE= +github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= +github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.1.0 h1:mpdLgm+brq10nI9zM1BpX1kpDbh3NLl3RSnVq6ZSkfg= +github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= +github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= +github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= +github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7 h1:fUYt2LlQHBIeNIprp6udnj9l4DerORtm/hjJUG+Xr8s= +github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f h1:sMVMj7EiIYDQogkui8CPvTMXJTVLhr0jOvoaiIuegu8= +github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8 h1:PtrDbVbpg4dKJHCD65yyohKbuSf8FO8l3dvAsFfuif8= +github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-server-timing v1.0.0 h1:cdHk4f7lxjwbRqTSGZFw8PCeoNYXGp4T4Sdr8wT+Xlw= +github.com/mitchellh/go-server-timing v1.0.0/go.mod h1:RdipKQzCJaL4HyxFQBINbf4XoDdZKkSshqw9Bbsx1ic= +github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 h1:ULR/QWMgcgRiZLUjSSJMU+fW+RDMstRdmnDWj9Q+AsA= +github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/ncw/swift v1.0.52/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode v1.1.2 h1:Cj0yZY6T1Zx1R7AhTbyGSALm44/Mmq+BAPc4B/p/d3M= +github.com/nwaples/rardecode v1.1.2/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +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.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.2.0 h1:3ZNA3L1c5FYDFTTxbFeVGGD8jYvjYauHD30YgLxVsNI= +github.com/onsi/ginkgo/v2 v2.2.0/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s= +github.com/oschwald/geoip2-golang v1.8.0 h1:KfjYB8ojCEn/QLqsDU0AzrJ3R5Qa9vFlx3z6SLNcKTs= +github.com/oschwald/geoip2-golang v1.8.0/go.mod h1:R7bRvYjOeaoenAp9sKRS8GX5bJWcZ0laWO5+DauEktw= +github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis= +github.com/oschwald/maxminddb-golang v1.10.0 h1:Xp1u0ZhqkSuopaKmk1WwHtjF0H9Hd9181uj2MQ5Vndg= +github.com/oschwald/maxminddb-golang v1.10.0/go.mod h1:Y2ELenReaLAZ0b400URyGwvYxHV1dLIxBuyOsyYjHK0= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/oxtoacart/emsort v0.0.0-20160911032127-e467347e3354/go.mod h1:IQ2AliaPIeFz7bCSZl4NkBSh+JKdYqrjoSkE+tTH7P4= +github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.2/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.12 h1:44l88ehTZAUGW4VlO1QC4zkilL99M6Y9MXNwEs0uzP8= +github.com/pierrec/lz4/v4 v4.1.12/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= +github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= +github.com/pion/dtls/v2 v2.2.6 h1:yXMxKr0Skd+Ub6A8UqXTRLSywskx93ooMRHsQUtd+Z4= +github.com/pion/dtls/v2 v2.2.6/go.mod h1:t8fWJCIquY5rlQZwA2yWxUS1+OCrAdXrhVKXB5oD/wY= +github.com/pion/ice/v2 v2.3.1 h1:FQCmUfZe2Jpe7LYStVBOP6z1DiSzbIateih3TztgTjc= +github.com/pion/ice/v2 v2.3.1/go.mod h1:aq2kc6MtYNcn4XmMhobAv6hTNJiHzvD0yXRz80+bnP8= +github.com/pion/interceptor v0.1.12 h1:CslaNriCFUItiXS5o+hh5lpL0t0ytQkFnUcbbCs2Zq8= +github.com/pion/interceptor v0.1.12/go.mod h1:bDtgAD9dRkBZpWHGKaoKb42FhDHTG2rX8Ii9LRALLVA= +github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/mdns v0.0.7 h1:P0UB4Sr6xDWEox0kTVxF0LmQihtCbSAdW0H2nEgkA3U= +github.com/pion/mdns v0.0.7/go.mod h1:4iP2UbeFhLI/vWju/bw6ZfwjJzk0z8DNValjGxR/dD8= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.10 h1:nkr3uj+8Sp97zyItdN60tE/S6vk4al5CPRR6Gejsdjc= +github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I= +github.com/pion/rtp v1.7.13 h1:qcHwlmtiI50t1XivvoawdCGTP4Uiypzfrsap+bijcoA= +github.com/pion/rtp v1.7.13/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= +github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= +github.com/pion/sctp v1.8.6 h1:CUex11Vkt9YS++VhLf8b55O3VqKrWL6W3SDwX4jAqsI= +github.com/pion/sctp v1.8.6/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= +github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw= +github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= +github.com/pion/srtp/v2 v2.0.12 h1:WrmiVCubGMOAObBU1vwWjG0H3VSyQHawKeer2PVA5rY= +github.com/pion/srtp/v2 v2.0.12/go.mod h1:C3Ep44hlOo2qEYaq4ddsmK5dL63eLehXFbHaZ9F5V9Y= +github.com/pion/stun v0.4.0 h1:vgRrbBE2htWHy7l3Zsxckk7rkjnjOsSM7PHZnBwo8rk= +github.com/pion/stun v0.4.0/go.mod h1:QPsh1/SbXASntw3zkkrIk3ZJVKz4saBY2G7S10P3wCw= +github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40= +github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI= +github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= +github.com/pion/transport/v2 v2.0.2 h1:St+8o+1PEzPT51O9bv+tH/KYYLMNR5Vwm5Z3Qkjsywg= +github.com/pion/transport/v2 v2.0.2/go.mod h1:vrz6bUbFr/cjdwbnxq8OdDDzHf7JJfGsIRkxfpZoTA0= +github.com/pion/turn/v2 v2.1.0 h1:5wGHSgGhJhP/RpabkUb/T9PdsAjkGLS6toYz5HNzoSI= +github.com/pion/turn/v2 v2.1.0/go.mod h1:yrT5XbXSGX1VFSF31A3c1kCNB5bBZgk/uu5LET162qs= +github.com/pion/udp/v2 v2.0.1 h1:xP0z6WNux1zWEjhC7onRA3EwwSliXqu1ElUZAQhUP54= +github.com/pion/udp/v2 v2.0.1/go.mod h1:B7uvTMP00lzWdyMr/1PVZXtV3wpPIxBRd4Wl6AksXn8= +github.com/pion/webrtc/v3 v3.1.58 h1:husXqiKQuk6gbOqJlPHs185OskAyxUW6iAEgHghgCrc= +github.com/pion/webrtc/v3 v3.1.58/go.mod h1:jJdqoqGBlZiE3y8Z1tg1fjSkyEDCZLL+foypUBn0Lhk= +github.com/pivotal-cf-experimental/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:AbOpFa7UXCGaV+aq9tvFdSHEhmcb8uO6nKZdYhKsT1I= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +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 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +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_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +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/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +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/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/reflog/minisentinel v0.0.0-20210817104530-e0dd88cb8bc6/go.mod h1:UdPuN3+X0Rvf3yJ++7j0zj4P8EaI6YwQJS+JbBk2o8k= +github.com/retailnext/hllpp v1.0.0/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rickar/props v0.0.0-20170718221555-0b06aeb2f037/go.mod h1:F1p8BNM4IXv2UcptwSp8HJOapKurodd/PYu1D6Gtn9Y= +github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg= +github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 h1:Lt9DzQALzHoDwMBGJ6v8ObDPR0dzr2a6sXTB1Fq7IHs= +github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417/go.mod h1:qe5TWALJ8/a1Lqznoc5BDHpYX/8HU60Hm2AwRmqzxqA= +github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= +github.com/samber/lo v1.25.0 h1:H8F6cB0RotRdgcRCivTByAQePaYhGMdOTJIj2QFS2I0= +github.com/samber/lo v1.25.0/go.mod h1:2I7tgIv8Q1SG2xEIkRq0F2i2zgxVpnyPOP0d3Gj2r+A= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/shadowsocks/go-shadowsocks2 v0.1.5 h1:PDSQv9y2S85Fl7VBeOMF9StzeXZyK1HakRm86CUbr28= +github.com/shadowsocks/go-shadowsocks2 v0.1.5/go.mod h1:AGGpIoek4HRno4xzyFiAtLHkOpcoznZEkAccaI/rplM= +github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= +github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 h1:xT+JlYxNGqyT+XcU8iUrN18JYed2TvG9yN5ULG2jATM= +github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= +github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= +github.com/siddontang/goredis v0.0.0-20180423163523-0b4019cbd7b7/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= +github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +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/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8= +github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +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/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/templexxx/cpu v0.0.1/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk= +github.com/templexxx/cpu v0.0.8 h1:va6GebSxedVdR5XEyPJD49t94p5ZsjWO6Wh/PfbmZnc= +github.com/templexxx/cpu v0.0.8/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk= +github.com/templexxx/xorsimd v0.4.1 h1:iUZcywbOYDRAZUasAs2eSCUW8eobuZDy0I9FJiORkVg= +github.com/templexxx/xorsimd v0.4.1/go.mod h1:W+ffZz8jJMH2SXwuKu9WhygqBMbFnp14G2fqEr8qaNo= +github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= +github.com/ti-mo/conntrack v0.3.0 h1:572/72R9la2FVvO6CbsLiCmR48U3pgCvIlLKoUrExDU= +github.com/ti-mo/conntrack v0.3.0/go.mod h1:tPSYNx21TnjxGz99pLD/lAN4fuEViaJZz+pliMqnovk= +github.com/ti-mo/netfilter v0.3.1 h1:+ZTmeTx+64Jw2N/1gmqm42kruDWjQ90SMjWEB1e6VDs= +github.com/ti-mo/netfilter v0.3.1/go.mod h1:t/5HvCCHA1LAYj/AZF2fWcJ23BQTA7lzTPCuwwi7xQY= +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.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tkuchiki/go-timezone v0.2.0 h1:yyZVHtQRVZ+wvlte5HXvSpBkR0dPYnPEIgq9qqAqltk= +github.com/tkuchiki/go-timezone v0.2.0/go.mod h1:b1Ean9v2UXtxSq4TZF0i/TU9NuoWa9hOzOKoGCV2zqY= +github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= +github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E= +github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= +github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de/go.mod h1:irMhzlTz8+fVFj6CH2AN2i+WI5S6wWFtK3MBCIxIpyI= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= +github.com/vulcand/oxy v0.0.0-20180330141130-3a0f6c4b456b h1:ioaiAF0xFShpgoyjNsjVauaCSa+5p9HSltCHyFDhMu0= +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/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/xitongsys/parquet-go v1.5.1/go.mod h1:xUxwM8ELydxh4edHGegYq1pA8NnMKDx0K/GyB0o2bww= +github.com/xitongsys/parquet-go v1.6.2/go.mod h1:IulAQyalCm0rPiZVNnCgm/PCL64X2tdSVGMQ/UeKqWA= +github.com/xitongsys/parquet-go-source v0.0.0-20190524061010-2b72cbee77d5/go.mod h1:xxCx7Wpym/3QCo6JhujJX51dzSXrwmb0oH6FQb39SEA= +github.com/xitongsys/parquet-go-source v0.0.0-20200817004010-026bad9b25d0/go.mod h1:HYhIKsdns7xz80OgkbgJYrtQY7FjHWHKH6cvN7+czGE= +github.com/xitongsys/parquet-go-source v0.0.0-20211228015320-b4f792c43cd0/go.mod h1:qLb2Itmdcp7KPa5KZKvhE9U1q5bYSOmgeOckF/H2rQA= +github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= +github.com/xtaci/smux v1.5.10/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY= +github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01 h1:ucyjgLtiX0nJKpFwoOCf0FV7COPz4cUOjBC5Qg4T/kc= +github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY= +github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2/go.mod h1:hzfGeIUDq/j97IG+FhNqkowIyEcD88LrW6fyU3K3WqY= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= +github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= +github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= +gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb h1:qRSZHsODmAP5qDvb3YsO7Qnf3TRiVbGxNG/WYnlM4/o= +gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb/go.mod h1:gvdJuZuO/tPZyhEV8K3Hmoxv/DWud5L4qEQxfYjEUTo= +gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d h1:tJ8F7ABaQ3p3wjxwXiWSktVDgjZEXkvaRawd2rIq5ws= +gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d/go.mod h1:9GcM8QNU9/wXtEEH2q8bVOnPI7FtIF6VVLzZ1l6Hgf8= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 h1:lE9EJyw3/JhrjWH/hEy9FptnalDQgj7vpbgC2KCCCxE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0/go.mod h1:pcQ3MM3SWvrA71U4GDqv9UFDJ3HQsW7y5ZO3tDTlUdI= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= +go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0 h1:pa05sNT/P8OsIQ8mPZKTIyiBuzS/xDGLVx+DCt0y6Vs= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.13.0/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.36.0 h1:9uzubQUMa9RsQqQZc0Btl51pTLMdHgDHJszg6839rBQ= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.36.0/go.mod h1:N+2vPD0QfUraV0HGpuiAEzM+rxpnH3Q+/+Qs6HQeWac= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.36.0 h1:o1NyoBU8j3tY5Vtff07/dNi2egBfC4R0qSuWI0z+8pA= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.36.0/go.mod h1:OhE6QNMd4yb/mN0LFxiutl2U1HPekpBHv9hN3TzYKmE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0 h1:ZVqtSAxrR4+ofzayuww0/EKamCjjnwnXTMRZzMudJoU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.12.0/go.mod h1:IlaGLENJkAl9+Xoo3J0unkdOwtL+rmqZ3ryMjUtYA94= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0 h1:L23MzcHDznr05xOM1Ng1F98L0nVd7hm/S7y2jW9IRB4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.12.0/go.mod h1:C+onYX2j5QH653b3wGJwowYr8jLMjBJw35QcaCQQK0U= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.37.0 h1:pHDQuLQOZwYD+Km0eb657A25NaRzy0a+eLyKfDXedEs= +go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/sdk/metric v0.37.0 h1:haYBBtZZxiI3ROwSmkZnI+d0+AVzBWeviuYQDeBWosU= +go.opentelemetry.io/otel/sdk/metric v0.37.0/go.mod h1:mO2WV1AZKKwhwHTV3AKOoIEb9LbUaENZDuGUQd+j4A0= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= +go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220823124025-807a23277127 h1:S4NrSKDfihhl3+4jSTgwoIevKxX9p7Iv9x++OEIptDo= +golang.org/x/exp v0.0.0-20220823124025-807a23277127/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +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/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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-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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +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-20190724013045-ca1201d0de80/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-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/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-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +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/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +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/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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-20190204203706-41f3e6584952/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190516110030-61b9204099cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191224085550-c709ea063b76/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/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-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210608053332-aa57babbf139/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/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/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +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-20190206041539-40960b6deb8e/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +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= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +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.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +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/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +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= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= +gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= +gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= +gopkg.in/jcmturner/gokrb5.v7 v7.3.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= +gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= +gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM= +gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8= +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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +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= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +howett.net/plist v0.0.0-20200419221736-3b63eb3a43b5 h1:AQkaJpH+/FmqRjmXZPELom5zIERYZfwTjnHpfoVMQEc= +howett.net/plist v0.0.0-20200419221736-3b63eb3a43b5/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/integrationtest/integrationtest.go b/integrationtest/integrationtest.go deleted file mode 100644 index bb7a12416..000000000 --- a/integrationtest/integrationtest.go +++ /dev/null @@ -1,638 +0,0 @@ -// Package integrationtest provides support for integration style tests that -// need a local web server and proxy server. -package integrationtest - -import ( - "compress/gzip" - "context" - "crypto/sha256" - "crypto/tls" - _ "embed" - "encoding/binary" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "io/ioutil" - "net" - "net/http" - "os" - "path/filepath" - "regexp" - "strings" - "sync/atomic" - "testing" - "time" - - "github.com/getlantern/common/config" - "github.com/getlantern/golog" - proxy "github.com/getlantern/http-proxy-lantern/v2" - "github.com/getlantern/tlsdefaults" - "github.com/getlantern/waitforserver" - "github.com/getlantern/yaml" - - "github.com/getlantern/flashlight/client" -) - -const ( - Content = "THIS IS SOME STATIC CONTENT FROM THE WEB SERVER" - Token = "AF325DF3432FDS" - KeyFile = "./proxykey.pem" - CertFile = "./proxycert.pem" - - Etag = "X-Lantern-Etag" - IfNoneMatch = "X-Lantern-If-None-Match" - - obfs4SubDir = ".obfs4" - - // The default (1024) eats up a good chunk of the race detector's cap of 8192 goroutines. - obfs4HandshakeConcurrency = 100 - - shadowsocksSecret = "foobarbaz" - shadowsocksUpstream = "local" - shadowsocksCipher = "chacha20-ietf-poly1305" - - tlsmasqSNI = "test.com" - tlsmasqSuites = "0xcca9,0x1301" // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_AES_128_GCM_SHA256 - tlsmasqMinVersion = "0x0303" // TLS 1.2 - tlsmasqServerSecret = "d0cd0e2e50eb2ac7cb1dc2c94d1bc8871e48369970052ff866d1e7e876e77a13246980057f70d64a2bdffb545330279f69bce5fd" -) - -var ( - log = golog.LoggerFor("testsupport") - tlsmasqOriginAddr string - //go:embed global-cfg.yaml - globalCfg []byte - //go:embed proxies-template.yaml - proxiesTemplate []byte -) - -// Helper is a helper for running integration tests that provides its own web, -// proxy and config servers. -type Helper struct { - protocol atomic.Value - t *testing.T - ConfigDir string - HTTPSProxyServerAddr string - HTTPSUTPAddr string - OBFS4ProxyServerAddr string - OBFS4UTPProxyServerAddr string - LampshadeProxyServerAddr string - LampshadeUTPProxyServerAddr string - QUICIETFProxyServerAddr string - WSSProxyServerAddr string - ShadowsocksProxyServerAddr string - ShadowsocksmuxProxyServerAddr string - TLSMasqProxyServerAddr string - HTTPSSmuxProxyServerAddr string - HTTPSPsmuxProxyServerAddr string - HTTPServerAddr string - HTTPSServerAddr string - ConfigServerAddr string - tlsMasqOriginAddr string - listeners []net.Listener -} - -// NewHelper prepares a new integration test helper including a web server for -// content, a proxy server and a config server that ties it all together. It -// also enables ForceProxying on the client package to make sure even localhost -// origins are served through the proxy. Make sure to close the Helper with -// Close() when finished with the test. -func NewHelper(t *testing.T, basePort int) (*Helper, error) { - ConfigDir, err := ioutil.TempDir("", "integrationtest_helper") - log.Debugf("ConfigDir is %v", ConfigDir) - if err != nil { - return nil, err - } - - nextPort := basePort - nextListenAddr := func() string { - addr := fmt.Sprintf("localhost:%d", nextPort) - nextPort++ - return addr - } - - helper := &Helper{ - t: t, - ConfigDir: ConfigDir, - HTTPSProxyServerAddr: nextListenAddr(), - HTTPSUTPAddr: nextListenAddr(), - OBFS4ProxyServerAddr: nextListenAddr(), - OBFS4UTPProxyServerAddr: nextListenAddr(), - LampshadeProxyServerAddr: nextListenAddr(), - LampshadeUTPProxyServerAddr: nextListenAddr(), - QUICIETFProxyServerAddr: nextListenAddr(), - WSSProxyServerAddr: nextListenAddr(), - ShadowsocksProxyServerAddr: nextListenAddr(), - ShadowsocksmuxProxyServerAddr: nextListenAddr(), - TLSMasqProxyServerAddr: nextListenAddr(), - HTTPSSmuxProxyServerAddr: nextListenAddr(), - HTTPSPsmuxProxyServerAddr: nextListenAddr(), - } - helper.SetProtocol("https") - client.ForceProxying() - - // Web server serves known content for testing - err = helper.startWebServer() - if err != nil { - helper.Close() - return nil, err - } - - // Start an origin server for tlsmasq to masquerade as. - err = helper.startTLSMasqOrigin() - if err != nil { - helper.Close() - return nil, fmt.Errorf("failed to start tlsmasq origin: %v", err) - } - - // This is the remote proxy server - err = helper.startProxyServer() - if err != nil { - helper.Close() - return nil, err - } - - // This is a fake config server that serves up a config that points at our - // testing proxy server. - err = helper.startConfigServer() - if err != nil { - helper.Close() - return nil, err - } - - // We have to write out a config file so that Lantern doesn't try to use the - // default config, which would go to some remote proxies that can't talk to - // our fake config server. - err = helper.writeConfig() - if err != nil { - helper.Close() - return nil, err - } - - return helper, nil -} - -// Close closes the integration test helper and cleans up. -// TODO: actually stop the proxy (not currently supported by API) -func (helper *Helper) Close() { - client.StopForcingProxying() - os.RemoveAll(helper.ConfigDir) - for _, l := range helper.listeners { - l.Close() - } -} - -func (helper *Helper) startWebServer() error { - lh, err := net.Listen("tcp", "localhost:0") - if err != nil { - return fmt.Errorf("Unable to listen for HTTP connections: %v", err) - } - helper.listeners = append(helper.listeners, lh) - ls, err := tlsdefaults.Listen("localhost:0", "webkey.pem", "webcert.pem") - if err != nil { - return fmt.Errorf("Unable to listen for HTTPS connections: %v", err) - } - helper.listeners = append(helper.listeners, ls) - go func() { - http.Serve(lh, http.HandlerFunc(serveContent)) - }() - go func() { - http.Serve(ls, http.HandlerFunc(serveContent)) - }() - helper.HTTPServerAddr, helper.HTTPSServerAddr = lh.Addr().String(), ls.Addr().String() - return nil -} - -func serveContent(resp http.ResponseWriter, req *http.Request) { - resp.WriteHeader(http.StatusOK) - resp.Write([]byte(Content)) -} - -func (helper *Helper) startProxyServer() error { - kcpConfFile, err := ioutil.TempFile("", "") - if err != nil { - return err - } - - err = json.NewEncoder(kcpConfFile).Encode(kcpConf) - kcpConfFile.Close() - if err != nil { - return err - } - - s1 := &proxy.Proxy{ - TestingLocal: true, - HTTPAddr: helper.HTTPSProxyServerAddr, - HTTPMultiplexAddr: helper.HTTPSSmuxProxyServerAddr, - Obfs4Addr: helper.OBFS4ProxyServerAddr, - Obfs4Dir: filepath.Join(helper.ConfigDir, obfs4SubDir), - Obfs4HandshakeConcurrency: obfs4HandshakeConcurrency, - LampshadeAddr: helper.LampshadeProxyServerAddr, - QUICIETFAddr: helper.QUICIETFProxyServerAddr, - WSSAddr: helper.WSSProxyServerAddr, - TLSMasqAddr: helper.TLSMasqProxyServerAddr, - ShadowsocksAddr: helper.ShadowsocksProxyServerAddr, - ShadowsocksMultiplexAddr: helper.ShadowsocksmuxProxyServerAddr, - ShadowsocksSecret: shadowsocksSecret, - - TLSMasqSecret: tlsmasqServerSecret, - TLSMasqOriginAddr: helper.tlsMasqOriginAddr, - - Token: Token, - KeyFile: KeyFile, - CertFile: CertFile, - IdleTimeout: 30 * time.Second, - HTTPS: true, - } - - // kcp server - s2 := &proxy.Proxy{ - TestingLocal: true, - HTTPAddr: "127.0.0.1:0", - KCPConf: kcpConfFile.Name(), - Token: Token, - KeyFile: KeyFile, - CertFile: CertFile, - IdleTimeout: 30 * time.Second, - HTTPS: false, - } - - // psmux multiplexed http - // smux multiplexed http - s3 := &proxy.Proxy{ - TestingLocal: true, - HTTPS: true, - HTTPMultiplexAddr: helper.HTTPSPsmuxProxyServerAddr, - MultiplexProtocol: "psmux", - Token: Token, - KeyFile: KeyFile, - CertFile: CertFile, - IdleTimeout: 30 * time.Second, - } - - go s1.ListenAndServe(context.Background()) - go s2.ListenAndServe(context.Background()) - - err = waitforserver.WaitForServer("tcp", helper.HTTPSProxyServerAddr, 10*time.Second) - if err != nil { - return err - } - - // Wait for cert file to show up - var statErr error - for i := 0; i < 400; i++ { - _, statErr = os.Stat(CertFile) - if statErr != nil { - time.Sleep(25 * time.Millisecond) - } - } - if statErr != nil { - return statErr - } - - // only launch / wait for this one after the cert is in place (can race otherwise.) - go s3.ListenAndServe(context.Background()) - err = waitforserver.WaitForServer("tcp", helper.HTTPSPsmuxProxyServerAddr, 10*time.Second) - - return err -} - -func (helper *Helper) startConfigServer() error { - l, err := net.Listen("tcp", "localhost:0") - if err != nil { - return fmt.Errorf("Unable to listen for config server connection: %v", err) - } - helper.listeners = append(helper.listeners, l) - go func() { - http.Serve(l, http.HandlerFunc(helper.serveConfig())) - }() - helper.ConfigServerAddr = l.Addr().String() - return nil -} - -func (helper *Helper) serveConfig() func(http.ResponseWriter, *http.Request) { - return func(resp http.ResponseWriter, req *http.Request) { - log.Debugf("Reading request path: %v", req.URL.String()) - defer log.Debugf("Done serving request path: %v", req.URL.String()) - if strings.Contains(req.URL.String(), "global") { - helper.writeGlobalConfig(resp, req) - } else if strings.Contains(req.URL.String(), "prox") { - helper.writeProxyConfig(resp, req) - } else { - log.Errorf("Not requesting global or proxies in %v", req.URL.String()) - resp.WriteHeader(http.StatusBadRequest) - } - } -} - -func (helper *Helper) writeGlobalConfig(resp http.ResponseWriter, req *http.Request) { - log.Debug("Writing global config") - version := "1" - - if req.Header.Get(IfNoneMatch) == version { - resp.WriteHeader(http.StatusNotModified) - return - } - - resp.Header().Set(Etag, version) - resp.WriteHeader(http.StatusOK) - - w := gzip.NewWriter(resp) - _, err := w.Write(globalCfg) - if err != nil { - helper.t.Error(err) - } - w.Close() -} - -func (helper *Helper) writeProxyConfig(resp http.ResponseWriter, req *http.Request) { - log.Debug("Writing proxy config") - proto := helper.protocol.Load().(string) - cfg, err := helper.buildProxies(proto) - if err != nil { - helper.t.Error(err) - resp.WriteHeader(http.StatusInternalServerError) - return - } - out, err := yaml.Marshal(cfg) - if err != nil { - helper.t.Error(err) - resp.WriteHeader(http.StatusInternalServerError) - return - } - - etag := fmt.Sprintf("%x", sha256.Sum256(out)) - if req.Header.Get(IfNoneMatch) == etag { - resp.WriteHeader(http.StatusNotModified) - return - } - - resp.Header().Set(Etag, etag) - resp.WriteHeader(http.StatusOK) - - w := gzip.NewWriter(resp) - _, err = w.Write(out) - if err != nil { - helper.t.Error(err) - } - w.Close() -} - -func (helper *Helper) writeConfig() error { - filename := filepath.Join(helper.ConfigDir, "proxies.yaml") - proto := helper.protocol.Load().(string) - cfg, err := helper.buildProxies(proto) - if err != nil { - return err - } - out, err := yaml.Marshal(cfg) - if err != nil { - return err - } - return ioutil.WriteFile(filename, out, 0644) -} - -func (helper *Helper) buildProxies(proto string) (map[string]*config.ProxyConfig, error) { - protos := strings.Split(proto, ",") - // multipath - if len(protos) > 1 { - proxies := make(map[string]*config.ProxyConfig) - for _, p := range protos { - cfgs, err := helper.buildProxies(p) - if err != nil { - return nil, err - } - for name, cfg := range cfgs { - cfg.MultipathEndpoint = "multipath-endpoint" - proxies[name] = cfg - } - } - return proxies, nil - } - var srv config.ProxyConfig - err := yaml.Unmarshal(proxiesTemplate, &srv) - if err != nil { - return nil, fmt.Errorf("Could not unmarshal config %v", err) - } - - srv.AuthToken = Token - if proto == "obfs4" || proto == "utpobfs4" { - if proto == "utpobfs4" { - srv.Addr = helper.OBFS4UTPProxyServerAddr - } else { - srv.Addr = helper.OBFS4ProxyServerAddr - } - srv.PluggableTransport = proto - srv.PluggableTransportSettings = map[string]string{ - "iat-mode": "0", - } - - bridgelineFile, err2 := ioutil.ReadFile(filepath.Join(filepath.Join(helper.ConfigDir, obfs4SubDir), "obfs4_bridgeline.txt")) - if err2 != nil { - return nil, fmt.Errorf("Could not read obfs4_bridgeline.txt: %v", err2) - } - obfs4extract := regexp.MustCompile(".+cert=([^\\s]+).+") - srv.Cert = string(obfs4extract.FindSubmatch(bridgelineFile)[1]) - } else { - cert, err2 := ioutil.ReadFile(CertFile) - if err2 != nil { - return nil, fmt.Errorf("Could not read cert %v", err2) - } - srv.Cert = string(cert) - if proto == "lampshade" { - srv.Addr = helper.LampshadeProxyServerAddr - srv.PluggableTransport = "lampshade" - } else if proto == "quic_ietf" { - srv.Addr = helper.QUICIETFProxyServerAddr - srv.PluggableTransport = "quic_ietf" - } else if proto == "wss" { - srv.Addr = helper.WSSProxyServerAddr - srv.PluggableTransport = "wss" - srv.PluggableTransportSettings = map[string]string{ - "url": fmt.Sprintf("https://%s", helper.WSSProxyServerAddr), - "multiplexed": "true", - } - } else if proto == "utphttps" { - srv.Addr = helper.HTTPSUTPAddr - srv.PluggableTransport = "utphttps" - } else if proto == "utplampshade" { - srv.Addr = helper.LampshadeUTPProxyServerAddr - srv.PluggableTransport = "utplampshade" - } else if proto == "tlsmasq" { - srv.Addr = helper.TLSMasqProxyServerAddr - srv.PluggableTransport = "tlsmasq" - srv.PluggableTransportSettings = map[string]string{ - "tlsmasq_sni": tlsmasqSNI, - "tlsmasq_suites": tlsmasqSuites, - "tlsmasq_tlsminversion": tlsmasqMinVersion, - "tlsmasq_secret": tlsmasqServerSecret, - } - } else if proto == "shadowsocks" { - srv.Addr = helper.ShadowsocksProxyServerAddr - srv.PluggableTransport = "shadowsocks" - srv.PluggableTransportSettings = map[string]string{ - "shadowsocks_secret": shadowsocksSecret, - "shadowsocks_upstream": shadowsocksUpstream, - "shadowsocks_cipher": shadowsocksCipher, - } - } else if proto == "shadowsocks-mux" { - srv.Addr = "multiplexed" - srv.MultiplexedAddr = helper.ShadowsocksmuxProxyServerAddr - srv.PluggableTransport = "shadowsocks" - srv.PluggableTransportSettings = map[string]string{ - "shadowsocks_secret": shadowsocksSecret, - "shadowsocks_upstream": shadowsocksUpstream, - "shadowsocks_cipher": shadowsocksCipher, - } - } else if proto == "https+smux" { - srv.Addr = "multiplexed" - srv.MultiplexedAddr = helper.HTTPSSmuxProxyServerAddr - // the default is smux, so srv.MultiplexedProtocol is unset - } else if proto == "https+psmux" { - srv.Addr = "multiplexed" - srv.MultiplexedAddr = helper.HTTPSPsmuxProxyServerAddr - srv.MultiplexedProtocol = "psmux" - } else { - srv.Addr = helper.HTTPSProxyServerAddr - } - } - return map[string]*config.ProxyConfig{"proxy-" + proto: &srv}, nil -} - -func (helper *Helper) startTLSMasqOrigin() error { - // Self-signed cert, common name: test.com - var ( - certPem = []byte(`-----BEGIN CERTIFICATE----- -MIIC/jCCAeYCCQCfzdJ86xOcUjANBgkqhkiG9w0BAQsFADBBMRYwFAYDVQQKDA1J -bm5vdmF0ZSBMYWJzMRQwEgYDVQQLDAtFbmdpbmVlcmluZzERMA8GA1UEAwwIdGVz -dC5jb20wHhcNMjAwMTIyMTYyODQ5WhcNMzAwMTE5MTYyODQ5WjBBMRYwFAYDVQQK -DA1Jbm5vdmF0ZSBMYWJzMRQwEgYDVQQLDAtFbmdpbmVlcmluZzERMA8GA1UEAwwI -dGVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo45LvJ5dS -2Cx6WtfNuCb5IN5fR3dq9NZF9l4lToV39sWfSA9P87+yDvl5644qwHR5QTADNBc2 -ZP8D/2RYC4jb3piVsx7D+ylJ2ZWyi9YPzLJOYK4USp9bLwGB92upi5ahOBMkeXJG -4W+DJ2O+IDlz23cr/CBazlwxr3aq17uT4I1OfR9xqWqRBmh9BdXLzhxX4naynPYc -KLecnp/LZgR7xAVG9KjHIVpLOcx+85xeDf2JLIGf3RfRLKVL90UzXRuGdSjwm3b/ -mX60r3kRz0iZO+DEWIt8QIsX31NUcSUyerC/2DrQDQikW4ingL2r16qhHyrg6Tr0 -LK4LrZW23weZAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAJwlrX5omzSKdH1PWPWC -BfiH8CdK4lypoLH3PCPcRm6W5PvMW6qZWIN6fzrf/wn0p6wzo3LB+P4AXW6aduOj -oOGXOeYjgqLN+xP5iEZAqrmFgDOJLUO0f465rsPY69LoCoGWXKnPZ2vqasGbfXF6 -KPKXirGGkAE41isKSLh1V6tyWSNWZYgcKccITyMMm75CDcZcChwApfZicw/NMU0W -O44i+Ht6wTAa0UJd9fnezE5FjJTqZg1n15HhhUb83ymxEmcoGUfiJ/PYcQSXDE3E -9mXD1VLPCzTX0QIQqo5McdHa385UokQya4BneK4MfpkHa8lUAYwWceGL02XgxFF1 -/GE= ------END CERTIFICATE-----`) - keyPem = []byte(`-----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCo45LvJ5dS2Cx6 -WtfNuCb5IN5fR3dq9NZF9l4lToV39sWfSA9P87+yDvl5644qwHR5QTADNBc2ZP8D -/2RYC4jb3piVsx7D+ylJ2ZWyi9YPzLJOYK4USp9bLwGB92upi5ahOBMkeXJG4W+D -J2O+IDlz23cr/CBazlwxr3aq17uT4I1OfR9xqWqRBmh9BdXLzhxX4naynPYcKLec -np/LZgR7xAVG9KjHIVpLOcx+85xeDf2JLIGf3RfRLKVL90UzXRuGdSjwm3b/mX60 -r3kRz0iZO+DEWIt8QIsX31NUcSUyerC/2DrQDQikW4ingL2r16qhHyrg6Tr0LK4L -rZW23weZAgMBAAECggEAS+5tTFrXfSa18JjRN6uY0h9F+z5tYUgM4k2fDFTeSw5G -0ZMbV032nL6AyaDvPSdj9nQpevc7jHgh85Eqcy9Ua84LehqbNW/Bo3NRC4I1Tssw -S27KNVNLjDp5Cg7Md+DLa1aDvL1hdJ68fRIDlSJ10jIUxVDI1yq6ZphF2Q+/RP9Q -W4U306ckXJq3w74lSXrQ00i4FER8B2FDZihmpclmN42tvgJBjVR792ZSEldg7Pa+ -0QY07UM7sGX12dSmmRPSof690wNRg55slYq3YQ6NBClsiiNqj2sS3rYkBMvh07BM -BAQL1ybFeHyILcrq5H3FOupLK/FJErCDc8HhaO26lQKBgQDWFMMrbk2TP2Ih5DUL -96i1KLdcIGpVrnMYe9k5fGGSXpqQUEvagmYFLxFMW5grYgGxkJFGt/pkpKCzcyQk -kpOZhn5H4t6/WpjkJT3cO+KzNa5EHd0rvPSq2le9pEJSTU7dTRGkclrGpbeWUhH0 -Re7+hswAwSPuM7XHIGX3sh7njwKBgQDJ9XdfNc2a8Ac7ZMy2nQ2IohwJAOYbQYBA -XrqaECYLFIApzdDakx33xdrmxpAAyjcHEQC6GRptSeqDsK43R+BaD7r3YnkBS6uI -+/dncIGsd6mmzVGjXpldORk4TGqTi0XFj8+4UWxUQ45H7YLwA49/jVXvczwnv6j4 -qH13OiFKVwKBgQDGR9yssTEwnJgrg86OEwgzIk8SCQPz7+uyVaNQVx+YDf9igrx+ -2h/b1UhUTNGX/OJMr/WeZnCIHuKo0pA7P3dtzt/PfRWKbkMFrGirPtwt2B5cAL0E -8bI7PJffke/Lgsb0uZkJktD5BCwSElmGwe8l13vDhx/cVBCdKijHTjbJiQKBgCu7 -7E3B6PRUZjyGZ45kFDoyYL/SYgIk/RDzcpVKSfK8TcS/vSqYETVGs1CmTyjcoW32 -UKH8LazdBNvfttphxkO6hFJuEKYnLM5NQhY0VuBySVrFu5gVNEDrzHpUkf/BeSp/ -KgxQFZVpy7XnySMQolKM2L8xxSUWbBDs676V5/+hAoGAJDpng/G6J4WSaL0ilaLM -gnvrmkW4QsmF+ijROgFOy+I8RpWlmMJkwJXRCj9N9ZC6rqaMSqahxVBmajOter4g -rk3unSMy6rlHWxyOpqStPWjnZlNz+1R7a6dBD+L2tY5jNJCGL8L7PejgAZWd/uwK -o91tzH1xsfoYsMnt6AP4cIQ= ------END PRIVATE KEY-----`) - ) - - decodeUint16 := func(s string) (uint16, error) { - b, err := hex.DecodeString(strings.TrimPrefix(s, "0x")) - if err != nil { - return 0, err - } - return binary.BigEndian.Uint16(b), nil - } - - // We need to ensure the negotiated cipher suite and TLS version are acceptable to the dialer. - suites := []uint16{} - suiteStrings := strings.Split(tlsmasqSuites, ",") - if len(suiteStrings) == 0 { - return errors.New("no cipher suites specified") - } - for _, s := range suiteStrings { - suite, err := decodeUint16(s) - if err != nil { - return fmt.Errorf("bad cipher string '%s': %v", s, err) - } - suites = append(suites, suite) - } - versStr := tlsmasqMinVersion - minVersion, err := decodeUint16(versStr) - if err != nil { - return fmt.Errorf("bad TLS version string '%s': %v", versStr, err) - } - - cert, err := tls.X509KeyPair(certPem, keyPem) - if err != nil { - return fmt.Errorf("failed to parse certificate: %v", err) - } - l, err := tls.Listen("tcp", "", &tls.Config{ - Certificates: []tls.Certificate{cert}, - CipherSuites: suites, - MinVersion: minVersion, - }) - if err != nil { - return err - } - - go func() { - for { - conn, err := l.Accept() - if err != nil && strings.Contains(err.Error(), "use of closed network connection") { - // Unexported, but stable error: https://golang.org/src/internal/poll/fd.go#L16 - return - } - if err != nil { - log.Debugf("tlsmasq origin server: accept failure: %v", err) - continue - } - go func(c net.Conn) { - // Force the handshake so that it can be proxied. - if err := c.(*tls.Conn).Handshake(); err != nil { - log.Debugf("tlsmasq origin server: handshake failure: %v", err) - return - } - }(conn) - } - }() - - helper.tlsMasqOriginAddr = l.Addr().String() - helper.listeners = append(helper.listeners, l) - return nil -} - -var kcpConf = map[string]interface{}{ - "scavengettl": 600, - "datashard": 10, - "interval": 50, - "mtu": 1350, - "sockbuf": 4194304, - "parityshard": 3, - "sndwnd": 128, - "mode": "fast2", - "crypt": "salsa20", - "key": "thisisreallyakey", - "snmpperiod": 60, - "rcvwnd": 512, - "conn": 1, - "keepalive": 10, - "listen": "127.0.0.1:8975", - "remoteaddr": "127.0.0.1:8975", -} diff --git a/integrationtest/integrationtest_nonutp.go b/integrationtest/integrationtest_nonutp.go deleted file mode 100644 index a2726229a..000000000 --- a/integrationtest/integrationtest_nonutp.go +++ /dev/null @@ -1,16 +0,0 @@ -// +build android linux - -package integrationtest - -// SetProtocol sets the protocol to use when connecting to the test proxy -// (updates the config served by the config server). -// In the case that the platform is android or linux, remove utp testing until it is supported by the build scripts -func (helper *Helper) SetProtocol(protocol string) { - if protocol == "utphttps" || protocol == "utpobfs4" { - log.Debugf("%s is not supported, set protocol to lampshade instead", protocol) - protocol = "lampshade" - } else { - log.Debug("set protocol to " + protocol) - } - helper.protocol.Store(protocol) -} diff --git a/integrationtest/integrationtest_utp.go b/integrationtest/integrationtest_utp.go deleted file mode 100644 index 29d36647b..000000000 --- a/integrationtest/integrationtest_utp.go +++ /dev/null @@ -1,10 +0,0 @@ -// +build !android,!linux - -package integrationtest - -// SetProtocol sets the protocol to use when connecting to the test proxy -// (updates the config served by the config server). -func (helper *Helper) SetProtocol(protocol string) { - log.Debug("set protocol to " + protocol) - helper.protocol.Store(protocol) -} diff --git a/integrationtest/main.go b/integrationtest/main.go new file mode 100644 index 000000000..cc077ee65 --- /dev/null +++ b/integrationtest/main.go @@ -0,0 +1,113 @@ +// Flashlight integration tester +// +// See README.md for more information +package main + +import ( + "flag" + "fmt" + "io" + "os" + "strings" + "sync" + "time" + + "github.com/getlantern/flashlight-integration-test/testcases" + "github.com/getlantern/flashlight-integration-test/testparams" + "github.com/getlantern/flashlight-integration-test/testrunner" + "github.com/sirupsen/logrus" +) + +var ( + testNameFlag = flag.String("test", "all", "Test to run") + availableTestParams []testparams.TestParams + log = logrus.New() +) + +func init() { + availableTestParams = []testparams.TestParams{ + // This is a dummy test that always passes and doesn't run any cases. + // It's useful for testing the test framework itself and as a template + // for new tests. + testparams.Test_Dummy, + // http + // ----- + testparams.Test_HTTP, + // https + // ----- + // TODO <10-04-2023, soltzen> There's an error in this test + // testparams.Test_HTTPS, + // + // Shadowsocks + // --------------- + testparams.Test_Shadowsocks_NoMultiplex, + } +} + +func main() { + flag.Parse() + + // Output logs to both stdout and to a file. + // + // XXX <10-04-2023, soltzen> Your stdout will be flooded since Flashlight + // is notoriously verbose. Read the test logs from the file instead for a + // cleaner output. + // The flashlight loggers will be cleaned up in a future PR. + log.SetLevel(logrus.DebugLevel) + // Output logs to a file + currentDate := time.Now().Format("20060102") + logFile, err := os.OpenFile( + fmt.Sprintf("integrationtest-%s.log", currentDate), + os.O_CREATE|os.O_WRONLY, + 0666, + ) + if err != nil { + panic(fmt.Sprintf("Failed to open log file: %v", err)) + } + log.SetOutput(io.MultiWriter(os.Stdout, logFile)) + + // Run all tests if no test name is specified + // Or, run the specified test + testName := strings.ToLower(*testNameFlag) + tests := []*testrunner.Test{} + for _, tp := range availableTestParams { + if testName == "all" || tp.Name == testName { + tests = append(tests, testrunner.NewTest(tp)) + } + } + + // Set loggers for each test + waitGroup := sync.WaitGroup{} + for _, t := range tests { + waitGroup.Add(1) + t.SetLogCallbacks( + // Info in a test case + func(tc testcases.TestCase, msg string) { + log.Infof("[%s:%s] %s", t.Params.Name, tc.Name, msg) + }, + // Error in a test case + func(tc testcases.TestCase, err error) { + log.Errorf("[%s:%s] %s", t.Params.Name, tc.Name, err) + }, + // General info in a test + func(msg string) { + log.Errorf("[%s] %s", t.Params.Name, msg) + }, + // Fatal log in a test + func(err error) { + log.Errorf("FATAL ERROR IN TEST [%s]: %s", t.Params.Name, err) + waitGroup.Done() + }, + // Test is done + func() { + log.Infof("[%s] DONE", t.Params.Name) + waitGroup.Done() + }) + + t.Run() + } + + // Wait for all tests to finish + waitGroup.Wait() + log.Infof("All tests done") +} diff --git a/integrationtest/projectpath/projectpath.go b/integrationtest/projectpath/projectpath.go new file mode 100644 index 000000000..d1bb59e6e --- /dev/null +++ b/integrationtest/projectpath/projectpath.go @@ -0,0 +1,13 @@ +package projectpath + +import ( + "path/filepath" + "runtime" +) + +var ( + _, b, _, _ = runtime.Caller(0) + + // Root folder of this project + Root = filepath.Join(filepath.Dir(b), "..") +) diff --git a/integrationtest/proxies-template.yaml b/integrationtest/proxies-template.yaml deleted file mode 100644 index 7f5c5ee05..000000000 --- a/integrationtest/proxies-template.yaml +++ /dev/null @@ -1,7 +0,0 @@ -addr: -pipelined: false -cert: "" -authtoken: -weight: 1000000 -qos: 10 -trusted: true diff --git a/integrationtest/testcases/default.go b/integrationtest/testcases/default.go new file mode 100644 index 000000000..28b860d37 --- /dev/null +++ b/integrationtest/testcases/default.go @@ -0,0 +1,42 @@ +package testcases + +import "github.com/getlantern/flashlight/balancer" + +var DefaultTestCases []TestCase + +func init() { + DefaultTestCases = []TestCase{ + // XXX <27-01-2023, soltzen> Whichever domain you test with **must be** + // in the non-throttle list in http-proxy-lantern. Otherwise, the + // connection will be throttled (read: blocked) and the test will fail. + // Why the connection is blocked and not throttled (i.e., rate limited) + // is hyper-weird and wrong. I'm looking into it. + // The non-throttle list: + // https://github.com/getlantern/http-proxy-lantern/blob/58d8f6f84a0b82065830adec15aa0f88638936dd/domains/domains.go#L62 + // + // + // { + // connectionType: balancer.NetworkConnect, + // testURL: "https://www.google.com/humans.txt", + // expectedStringInResponse: "Google is built by a large team of engineers", + // }, + { + Name: "Lantern.io", + connectionType: balancer.NetworkConnect, + testURL: "https://lantern.io", + expectedStringInResponse: "open internet", + }, + { + Name: "Stripe.com", + connectionType: balancer.NetworkConnect, + testURL: "https://stripe.com/de", + expectedStringInResponse: "Online-Bezahldienst", + }, + { + Name: "Paymentwall.com", + connectionType: balancer.NetworkConnect, + testURL: "https://www.paymentwall.com", + expectedStringInResponse: "paymentwall", + }, + } +} diff --git a/integrationtest/testcases/testcases.go b/integrationtest/testcases/testcases.go new file mode 100644 index 000000000..f093ce2d8 --- /dev/null +++ b/integrationtest/testcases/testcases.go @@ -0,0 +1,126 @@ +package testcases + +import ( + "context" + "fmt" + "io/ioutil" + "net" + "net/http" + "strings" + "time" + + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight/balancer" + "github.com/getlantern/flashlight/chained" + "github.com/getlantern/flashlight/common" +) + +var DefaultTimeoutPerTestCase = 3 * time.Second + +type TestCase struct { + Name string + connectionType string + testURL string + expectedStringInResponse string +} + +// Run runs a single test case. +// For each test case, it: +// 1. Creates a new dialer with the given configDir and proxyConfig +// 2. If prefixes is not nil, make sure we successfully receive all of them +// 3. Launch an HTTP request to cas.testURL with the created dialer and make +// sure it succeeds +func (cas TestCase) Run( + ctx context.Context, + testName string, + proxyConfig *config.ProxyConfig, + configDir string, +) error { + // Init the dialer + dialer, err := chained.CreateDialer( + configDir, + fmt.Sprintf("%s-%s", testName, cas.Name), + proxyConfig, + common.NullUserConfig{}, + ) + if err != nil { + return fmt.Errorf("Unable to create dialer: %v", err) + } + defer dialer.Stop() + + // Run a test HTTP request with the dialer + if err := runTestHTTPRequestWithDialer( + ctx, + dialer, + cas.connectionType, + cas.testURL, + cas.expectedStringInResponse); err != nil { + return fmt.Errorf("while running test HTTP request (%v): %v", + cas.testURL, err) + } + return nil +} + +func runTestHTTPRequestWithDialer( + ctx context.Context, + dialer balancer.Dialer, + connectionType, testURL, expectedStringInResponse string, +) error { + // Make a test request + req, err := http.NewRequestWithContext(ctx, "GET", testURL, nil) + if err != nil { + return fmt.Errorf("Unable to create request: %v", err) + } + + // Use an HTTP transport that uses the dialer. + // + // XXX <27-01-2023, soltzen> Don't use an http.Client since that will + // force a TLS handshake. Our dialer already handles that (see + // proxyimpl/*.go for info on your specific dialer. + // + // Also, don't add an http.Transport.Proxy since our dialer already runs a + // CONNECT request (for https requests) and modifies the Host header (for + // http requests), just like the http.Transport.Proxy would do. See this in + // action in chained/dialer.go. Our dialer knows about this from the + // supplied "connectionType" which is either balancer.NetworkConnect or + // balancer.NetworkPersistent (both "fake" connection types, used just to + // inform the dialer of the connection). + rt := &http.Transport{ + DialContext: func( + ctx context.Context, + network, addr string) (net.Conn, error) { + conn, upstreamErr, err := dialer.DialContext( + ctx, connectionType, addr) + if err != nil { + return nil, fmt.Errorf( + "DialContext upstream: %v | error: %v", upstreamErr, err) + } + return conn, nil + }, + } + + // Run the request + resp, err := rt.RoundTrip(req) + if err != nil { + return fmt.Errorf("Unable to make request: %v", err) + } + + // Read the response + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return fmt.Errorf("Unable to read response body: %v", err) + } + defer resp.Body.Close() + // fmt.Printf("Response body: %s", string(b)) + + // Assert response status code and body + if resp.StatusCode != 200 { + return fmt.Errorf("Unexpected status code: %d", resp.StatusCode) + } + if !strings.Contains(string(b), expectedStringInResponse) { + return fmt.Errorf( + "expected string [%s] was not found in response: %s", + expectedStringInResponse, string(b)) + } + return nil +} diff --git a/integrationtest/testparams/dummy.go b/integrationtest/testparams/dummy.go new file mode 100644 index 000000000..10ebb17cf --- /dev/null +++ b/integrationtest/testparams/dummy.go @@ -0,0 +1,17 @@ +package testparams + +import ( + "github.com/getlantern/common/config" +) + +var Test_Dummy TestParams + +func init() { + Test_Dummy = TestParams{ + Name: "dummy", + ProxyConfig: &config.ProxyConfig{ + Addr: DefaultTestAddr, + }, + TestCases: nil, + } +} diff --git a/integrationtest/testparams/http.go b/integrationtest/testparams/http.go new file mode 100644 index 000000000..71558bedb --- /dev/null +++ b/integrationtest/testparams/http.go @@ -0,0 +1,20 @@ +package testparams + +import ( + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight-integration-test/testcases" +) + +var Test_HTTP TestParams + +func init() { + Test_HTTP = TestParams{ + Name: "http", + ProxyConfig: &config.ProxyConfig{ + PluggableTransport: "http", + Addr: DefaultTestAddr, + AuthToken: "bunnyfoofoo", + }, + TestCases: testcases.DefaultTestCases, + } +} diff --git a/integrationtest/testparams/https.go b/integrationtest/testparams/https.go new file mode 100644 index 000000000..629390130 --- /dev/null +++ b/integrationtest/testparams/https.go @@ -0,0 +1,22 @@ +package testparams + +import ( + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight-integration-test/testcases" + "github.com/getlantern/flashlight-integration-test/util" +) + +var Test_HTTPS TestParams + +func init() { + Test_HTTPS = TestParams{ + Name: "https", + ProxyConfig: &config.ProxyConfig{ + PluggableTransport: "https", + Addr: DefaultTestAddr, + AuthToken: "bunnyfoofoo", + Cert: string(util.MustReadFile(LocalHTTPProxyLanternTestCertFile)), + }, + TestCases: testcases.DefaultTestCases, + } +} diff --git a/integrationtest/testparams/shadowsocks-nomultiplex.go b/integrationtest/testparams/shadowsocks-nomultiplex.go new file mode 100644 index 000000000..d56464d57 --- /dev/null +++ b/integrationtest/testparams/shadowsocks-nomultiplex.go @@ -0,0 +1,28 @@ +package testparams + +import ( + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight-integration-test/testcases" + "github.com/getlantern/flashlight-integration-test/util" +) + +var Test_Shadowsocks_NoMultiplex TestParams + +func init() { + Test_Shadowsocks_NoMultiplex = TestParams{ + Name: "shadowsocks-no-multiplex", + ProxyConfig: &config.ProxyConfig{ + PluggableTransport: "shadowsocks", + PluggableTransportSettings: map[string]string{ + "shadowsocks_secret": "secret", + "shadowsocks_cipher": "chacha20-ietf-poly1305", + }, + Addr: DefaultTestAddr, + AuthToken: "bunnyfoofoo", + Cert: string( + util.MustReadFile(LocalHTTPProxyLanternTestCertFile), + ), + }, + TestCases: testcases.DefaultTestCases, + } +} diff --git a/integrationtest/testparams/testparams.go b/integrationtest/testparams/testparams.go new file mode 100644 index 000000000..832c8ed2b --- /dev/null +++ b/integrationtest/testparams/testparams.go @@ -0,0 +1,25 @@ +package testparams + +import ( + "path/filepath" + + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight-integration-test/projectpath" + "github.com/getlantern/flashlight-integration-test/testcases" +) + +var LocalHTTPProxyLanternTestKeyFile = filepath.Join( + projectpath.Root, + "testdata", + "testkey.pem") +var LocalHTTPProxyLanternTestCertFile = filepath.Join( + projectpath.Root, + "testdata", + "testcert.pem") +var DefaultTestAddr = "localhost:41234" + +type TestParams struct { + Name string + ProxyConfig *config.ProxyConfig + TestCases []testcases.TestCase +} diff --git a/integrationtest/testrunner/testrunner.go b/integrationtest/testrunner/testrunner.go new file mode 100644 index 000000000..18bccd115 --- /dev/null +++ b/integrationtest/testrunner/testrunner.go @@ -0,0 +1,277 @@ +package testrunner + +import ( + "context" + "errors" + "fmt" + "net" + "os" + "strings" + "time" + + "github.com/getlantern/common/config" + "github.com/getlantern/flashlight-integration-test/testcases" + "github.com/getlantern/flashlight-integration-test/testparams" + httpProxyLantern "github.com/getlantern/http-proxy-lantern/v2" +) + +type Test struct { + infoCaseCallback func(testcases.TestCase, string) + errCaseCallback func(testcases.TestCase, error) + infoTestCallback func(string) + fatalTestCallback func(error) + doneTestCallback func() + Params testparams.TestParams +} + +func NewTest(params testparams.TestParams) *Test { + return &Test{ + Params: params, + } +} + +func (l *Test) SetLogCallbacks( + infoCaseCallback func(testcases.TestCase, string), + errCaseCallback func(testcases.TestCase, error), + infoTestCallback func(string), + fatalTestCallback func(error), + doneTestCallback func(), +) { + l.infoCaseCallback = infoCaseCallback + l.errCaseCallback = errCaseCallback + l.fatalTestCallback = fatalTestCallback + l.doneTestCallback = doneTestCallback +} + +func (l *Test) InfoCase(tc testcases.TestCase, s string) { + if l.infoCaseCallback != nil { + l.infoCaseCallback(tc, s) + } +} + +func (l *Test) InfoTest(s string) { + if l.infoTestCallback != nil { + l.infoTestCallback(s) + } +} + +func (l *Test) ErrorCase(tc testcases.TestCase, err error) { + if l.errCaseCallback != nil { + l.errCaseCallback(tc, err) + } +} + +func (l *Test) FatalTest(err error) { + if l.fatalTestCallback != nil { + l.fatalTestCallback(err) + } +} + +func (l *Test) DoneTest() { + if l.doneTestCallback != nil { + l.doneTestCallback() + } +} + +func (t *Test) Run() { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + proxyHandle, err := initHttpProxyLantern( + t.Params.Name, + t.Params.ProxyConfig, + ) + if err != nil { + t.FatalTest(err) + return + } + isProxyReady := make(chan struct{}) + go func() { + if err := proxyHandle.ListenAndServe( + ctx, + func() { close(isProxyReady) }, + ); err != nil { + switch { + // Ignore closed network errors + case errors.Is(err, net.ErrClosed): + case strings.Contains(err.Error(), "listener closed"): + break + default: + panic( + fmt.Errorf( + "Unable to start httpProxyLantern server: %v", + err, + ), + ) + } + } + }() + defer proxyHandle.Close() + <-isProxyReady + + t.InfoTest( + fmt.Sprintf("[%s] Proxy is ready: Running %d test cases...\n", + t.Params.Name, + len(t.Params.TestCases)), + ) + + // Init configDir in a temp dir + configDir, err := os.MkdirTemp("", "test") + if err != nil { + t.FatalTest(err) + return + } + defer os.RemoveAll(configDir) + + // Run the test cases serially (for now. Easier to debug) + // atLeastOneFailed := false + for _, cas := range t.Params.TestCases { + // Init the test case context + testCaseCtx, testCaseCtxCancel := context.WithTimeout( + context.Background(), testcases.DefaultTimeoutPerTestCase) + defer testCaseCtxCancel() + + if err := cas.Run(testCaseCtx, t.Params.Name, t.Params.ProxyConfig, configDir); err != nil { + t.FatalTest(fmt.Errorf("Test case %s failed: %v", cas.Name, err)) + return + // atLeastOneFailed = true + // t.Error(cas, err) + } + t.InfoCase(cas, "OK") + } + + // Make sure the reader knows at least one test case failed, if any + // if atLeastOneFailed { + // t.Fatal(errors.New("at least one test case failed")) + // return + // } + + t.DoneTest() +} + +func initHttpProxyLantern( + testName string, + cfg *config.ProxyConfig, +) (*httpProxyLantern.Proxy, error) { + // Mostly takes a params.ProxyConfig and returns an httpProxyLantern.Proxy + + p := &httpProxyLantern.Proxy{ + // Default values that work for all cases + Pro: true, + ThrottleRefreshInterval: 5 * time.Minute, + DiffServTOS: 0, + IdleTimeout: 90 * time.Second, + // General + ProxyName: "proxy-" + testName, + ProxyProtocol: cfg.PluggableTransport, + Token: cfg.AuthToken, + CertFile: testparams.LocalHTTPProxyLanternTestCertFile, + KeyFile: testparams.LocalHTTPProxyLanternTestKeyFile, + } + + switch cfg.PluggableTransport { + case "", "http", "https", "utphttp", "utphttps": + p.HTTPAddr = cfg.Addr + p.HTTPMultiplexAddr = cfg.MultiplexedAddr + // enhttp is mostly used for domain-fronting so you can ignore it for + // testing + // ENHTTPAddr string + // ENHTTPServerURL string + // ENHTTPReapIdleTime time.Duration + case "shadowsocks": + p.ShadowsocksAddr = cfg.Addr + p.ShadowsocksMultiplexAddr = cfg.MultiplexedAddr + p.ShadowsocksSecret = cfg.PluggableTransportSettings["shadowsocks_secret"] + p.ShadowsocksCipher = cfg.PluggableTransportSettings["shadowsocks_cipher"] + // + // unused + // - p.ShadowsocksReplayHistory + } + // obfs4 + // ----- + // Obfs4Addr string + // Obfs4MultiplexAddr string + // Obfs4Dir string + // Obfs4HandshakeConcurrency int + // Obfs4MaxPendingHandshakesPerClient int + // Obfs4HandshakeTimeout time.Duration + // + // kcp + // ----- + // KCPConf string + // + // quic + // ---- + // QUICIETFAddr string + // QUICUseBBR bool + // + // wss + // --- + // WSSAddr string + // + // TLS + // --- + // TLSListenerAllowTLS13 bool + // TLSMasqAddr string + // TLSMasqOriginAddr string + // TLSMasqSecret string + // TLSMasqTLSMinVersion uint16 + // TLSMasqTLSCipherSuites []uint16 + // + // + // Multiplex stuff + // ------- + // MultiplexProtocol string + // SmuxVersion int + // SmuxMaxFrameSize int + // SmuxMaxReceiveBuffer int + // SmuxMaxStreamBuffer int + // PsmuxVersion int + // PsmuxMaxFrameSize int + // PsmuxMaxReceiveBuffer int + // PsmuxMaxStreamBuffer int + // PsmuxDisablePadding bool + // PsmuxMaxPaddingRatio float64 + // PsmuxMaxPaddedSize int + // PsmuxDisableAggressivePadding bool + // PsmuxAggressivePadding int + // PsmuxAggressivePaddingRatio float64 + // + // Useless here + // ----- + // TestingLocal bool + // HoneycombSampleRate int + // TeleportSampleRate int + // PromExporterAddr string + // CountryLookup geo.CountryLookup + // ISPLookup geo.ISPLookup + // CfgSvrAuthToken string + // CfgSvrCacheClear time.Duration + // ConnectOKWaitsForUpstream bool + // EnableMultipath bool + // EnableReports bool + // ProxiedSitesSamplePercentage float64 + // ProxiedSitesTrackingID string + // ReportingRedisClient *rclient.Client + // VersionCheck bool + // VersionCheckRange string + // VersionCheckRedirectURL string + // VersionCheckRedirectPercentage float64 + // GoogleSearchRegex string + // GoogleCaptchaRegex string + // BlacklistMaxIdleTime time.Duration + // BlacklistMaxConnectInterval time.Duration + // BlacklistAllowedFailures int + // BlacklistExpiration time.Duration + // BuildType string + // BBRUpstreamProbeURL string + // PacketForwardAddr string + // ExternalIntf string + // SessionTicketKeyFile string + // FirstSessionTicketKey string + // RequireSessionTickets bool + // MissingTicketReaction tlslistener.HandshakeReaction + // ExternalIP string + // TunnelPorts string + + return p, nil +} diff --git a/integrationtest/util/util.go b/integrationtest/util/util.go new file mode 100644 index 000000000..8f5a1507f --- /dev/null +++ b/integrationtest/util/util.go @@ -0,0 +1,56 @@ +package util + +import ( + "context" + "fmt" + "os" + "path/filepath" + "sync" + "time" +) + +// Expand expands the path to include the home directory if the path +// is prefixed with `~`. If it isn't prefixed with `~`, the path is +// returned as-is. +func ExpandPath(path string) string { + if len(path) == 0 { + return path + } + if path[0] != '~' { + return path + } + if len(path) > 1 && path[1] != '/' && path[1] != '\\' { + return path + } + return filepath.Join(os.Getenv("HOME"), path[1:]) +} + +func WaitForWaitGroup(wg *sync.WaitGroup, timeout time.Duration) (ok bool) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + ch := make(chan struct{}) + go func() { + wg.Wait() + close(ch) + }() + select { + case <-ctx.Done(): + return false + case <-ch: + return true + } +} + +type IoNopCloser struct{} + +func (IoNopCloser) Close() error { + return nil +} + +func MustReadFile(filePath string) []byte { + b, err := os.ReadFile(filePath) + if err != nil { + panic(fmt.Errorf("Failed to read file %s: %w", filePath, err)) + } + return b +} From 9d4bc474c1e51ca16d2b71b09365f277742399ab Mon Sep 17 00:00:00 2001 From: Alec Soltzen <83119415+soltzen@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:53:16 +0200 Subject: [PATCH 4/5] [docs:README] Add testing instructions --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8a4ff37a3..b9bbef3d2 100644 --- a/README.md +++ b/README.md @@ -102,16 +102,16 @@ if let host = proxyAddr?.httpHost { lanternsdk/TestApp contains a test iOS application demonstrating use of the lanternsdk on iOS. -## A note on iOS and memory usage -The iOS application needs to run as a background process on iOS, meaning that it's severely memory restricted. Because of this, we disable a lot of protocols and extra features using `// go:build !ios` in order to conserve memory. - -### Why not use // +build !ios -go-mobile automatically sets the `ios` build tag when building for iOS. In our case, we don't use this because in addition to the iOS app, we also distribute an iOS SDK that's intended for embedding inside of user-interactice apps. This SDK does not have to run in the background and is thus not memory constrained in the same way as our iOS app. Consequently, the sdk can and does include all of the standard lantern protocols and features. - ### Architecture ![Overview](https://user-images.githubusercontent.com/1143966/117667942-72c80a80-b173-11eb-8c0d-829f2ccd8cde.png) +## Testing + +Unit test are run with `make test`. + +Functional tests that run a local Flashlight instance against a local http-proxy-lantern instance live in `./integrationtest`. See the README there for usage instructions. + ## Features We use "features" to enable/disable different characteristics/techniques in Flashlight, usually through the global config. From 872b89882958d69fce4a918186fadfa55779592c Mon Sep 17 00:00:00 2001 From: Alec Soltzen <83119415+soltzen@users.noreply.github.com> Date: Mon, 10 Apr 2023 17:53:38 +0200 Subject: [PATCH 5/5] [go.mod] Update shadowsocks and mod tidy This is a minor update, just to make the dependency point to main. No major changes. --- go.mod | 75 +++++------------------- go.sum | 177 ++++++++------------------------------------------------- 2 files changed, 37 insertions(+), 215 deletions(-) diff --git a/go.mod b/go.mod index 62ce4b494..e344deb2d 100644 --- a/go.mod +++ b/go.mod @@ -12,8 +12,6 @@ replace github.com/keighl/mandrill => github.com/getlantern/mandrill v0.0.0-2022 //replace github.com/getlantern/yinbi-server => ../yinbi-server -// replace github.com/getlantern/mandrill => /home/soltzen/dev/soltzen/mandrill - //replace github.com/getlantern/auth-server => ../auth-server //replace github.com/getlantern/lantern-server => ../lantern-server @@ -27,7 +25,7 @@ replace github.com/eycorsican/go-tun2socks => github.com/getlantern/go-tun2socks // on this unmerged PR against gomobile - https://github.com/golang/mobile/pull/58. replace golang.org/x/mobile => github.com/oxtoacart/mobile v0.0.0-20220116191336-0bdf708b6d0f -replace github.com/Jigsaw-Code/outline-ss-server => github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230114153732-0193919d4860 +replace github.com/Jigsaw-Code/outline-ss-server => github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93 // replace github.com/getlantern/dhtup => ../dhtup @@ -65,13 +63,11 @@ require ( github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac // indirect github.com/getlantern/hellosplitter v0.1.1 github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770 - github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230215114357-157d6da42017 github.com/getlantern/httpseverywhere v0.0.0-20201210200013-19ae11fc4eca github.com/getlantern/i18n v0.0.0-20181205222232-2afc4f49bb1c github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696 github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42 - github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966 github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be @@ -93,13 +89,11 @@ require ( github.com/getlantern/shortcut v0.0.0-20211026183428-bf59a137fdec github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9 github.com/getlantern/tinywss v0.0.0-20211216020538-c10008a7d461 - github.com/getlantern/tlsdefaults v0.0.0-20171004213447-cf35cfd0b1b4 github.com/getlantern/tlsdialer/v3 v3.0.3 github.com/getlantern/tlsmasq v0.4.6 github.com/getlantern/tlsresumption v0.0.0-20211216020551-6a3f901d86b9 github.com/getlantern/tlsutil v0.5.3 github.com/getlantern/uuid v1.2.0 - github.com/getlantern/waitforserver v1.0.1 github.com/getlantern/yaml v0.0.0-20190801163808-0c9bb1ebf426 github.com/getsentry/sentry-go v0.18.0 github.com/google/gopacket v1.1.17 @@ -114,8 +108,8 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/pborman/uuid v1.2.1 github.com/refraction-networking/utls v1.0.0 - github.com/shadowsocks/go-shadowsocks2 v0.1.4-0.20201002022019-75d43273f5a5 - github.com/stretchr/testify v1.8.1 + github.com/shadowsocks/go-shadowsocks2 v0.1.5 + github.com/stretchr/testify v1.8.2 github.com/vulcand/oxy v0.0.0-20180330141130-3a0f6c4b456b // indirect github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01 gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d @@ -126,15 +120,14 @@ require ( go.opentelemetry.io/otel/trace v1.11.1 go.uber.org/atomic v1.9.0 golang.org/x/mobile v0.0.0-20221110043201-43a038452099 - golang.org/x/net v0.1.0 - golang.org/x/sys v0.3.0 + golang.org/x/net v0.8.0 + golang.org/x/sys v0.6.0 google.golang.org/protobuf v1.28.1 howett.net/plist v0.0.0-20200419221736-3b63eb3a43b5 ) require ( github.com/Jigsaw-Code/outline-ss-server v1.4.0 - github.com/OperatorFoundation/Replicant-go/Replicant/v3 v3.0.14 github.com/getlantern/common v1.2.0 github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d ) @@ -145,18 +138,20 @@ require ( github.com/OperatorFoundation/go-shadowsocks2 v1.1.12 // indirect github.com/aead/ecdh v0.2.0 // indirect github.com/alecthomas/atomic v0.1.0-alpha2 // indirect - github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7 // indirect github.com/golang/mock v1.6.0 // indirect github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3 // indirect github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect github.com/miekg/dns v1.1.50 // indirect + github.com/montanaflynn/stats v0.6.6 // indirect github.com/onsi/ginkgo/v2 v2.2.0 // indirect + go.uber.org/goleak v1.1.12 // indirect golang.org/x/exp v0.0.0-20220823124025-807a23277127 // indirect ) require ( crawshaw.io/sqlite v0.3.3-0.20220618202545-d1964889ea3c // indirect filippo.io/edwards25519 v1.0.0-rc.1.0.20210721174708-390f27c3be20 // indirect + github.com/OperatorFoundation/Replicant-go/Replicant/v3 v3.0.14 github.com/OperatorFoundation/Starbridge-go/Starbridge/v3 v3.0.12 github.com/RoaringBitmap/roaring v1.2.1 // indirect github.com/Yawning/chacha20 v0.0.0-20170904085104-e3b1f968fc63 // indirect @@ -187,51 +182,30 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dchest/siphash v1.2.1 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/dvyukov/go-fuzz v0.0.0-20210429054444-fca39067bc72 // indirect github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9 // indirect github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd // indirect - github.com/getlantern/cmux v0.0.0-20200905031936-c55b16ee8462 // indirect github.com/getlantern/context v0.0.0-20220418194847-3d5e7a086201 // indirect github.com/getlantern/dns v0.0.0-20210120185712-8d005533efa0 // indirect github.com/getlantern/elevate v0.0.0-20220903142053-479ab992b264 // indirect github.com/getlantern/enproxy v0.0.0-20180913191734-002212d417a4 // indirect github.com/getlantern/fdcount v0.0.0-20210503151800-5decd65b3731 // indirect github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c // indirect - github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede // indirect - github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822 // indirect github.com/getlantern/go-cache v0.0.0-20141028142048-88b53914f467 // indirect - github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb // indirect github.com/getlantern/hex v0.0.0-20220104173244-ad7e4b9194dc // indirect - github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049 // indirect - github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54 // indirect - github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89 // indirect github.com/getlantern/msgpack v3.1.4+incompatible // indirect - github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360 // indirect github.com/getlantern/preconn v1.0.0 // indirect github.com/getlantern/probe v0.0.0-20211216020459-69afa01c1c5c // indirect github.com/getlantern/probednet v0.0.0-20211216020507-22fd9c1d3bf6 // indirect github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c // indirect github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad // indirect - github.com/getlantern/withtimeout v0.0.0-20160829163843-511f017cd913 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf // indirect - github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5 // indirect - github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571 // indirect - github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece // indirect - github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29 // indirect - github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/mux v1.8.0 // indirect @@ -239,27 +213,13 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/klauspost/compress v1.15.12 // indirect - github.com/klauspost/cpuid v1.3.1 // indirect - github.com/klauspost/pgzip v1.2.5 // indirect - github.com/klauspost/reedsolomon v1.9.9 // indirect github.com/libp2p/go-buffer-pool v0.0.2 // indirect github.com/lispad/go-generics-tools v1.1.0 // indirect github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/mdlayher/netlink v1.1.0 // indirect - github.com/mholt/archiver/v3 v3.5.1 // indirect - github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7 // indirect - github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f // indirect - github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 // indirect github.com/mschoch/smat v0.2.0 // indirect - github.com/nwaples/rardecode v1.1.2 // indirect - github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect - github.com/oschwald/geoip2-golang v1.8.0 // indirect - github.com/oschwald/maxminddb-golang v1.10.0 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect - github.com/pierrec/lz4/v4 v4.1.12 // indirect github.com/pion/datachannel v1.5.2 // indirect github.com/pion/dtls/v2 v2.1.5 // indirect github.com/pion/ice/v2 v2.2.7 // indirect @@ -286,31 +246,22 @@ require ( github.com/prometheus/procfs v0.8.0 // indirect github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect github.com/samber/lo v1.25.0 - github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/templexxx/cpu v0.0.8 // indirect - github.com/templexxx/xorsimd v0.4.1 // indirect - github.com/ti-mo/conntrack v0.3.0 // indirect - github.com/ti-mo/netfilter v0.3.1 // indirect github.com/tidwall/btree v1.6.0 // indirect - github.com/tjfoc/gmsm v1.3.2 // indirect github.com/tkuchiki/go-timezone v0.2.0 // indirect - github.com/ulikunitz/xz v0.5.10 // indirect - github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect gitlab.com/yawning/edwards25519-extra.git v0.0.0-20211229043746-2f91fcc9fbdb // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.1 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/crypto v0.7.0 // indirect + golang.org/x/mod v0.8.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/text v0.8.0 // indirect golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/tools v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78 // indirect google.golang.org/grpc v1.50.1 // indirect diff --git a/go.sum b/go.sum index 68629d1fe..7ffbcdc6a 100644 --- a/go.sum +++ b/go.sum @@ -154,7 +154,6 @@ github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/Uzi github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs= github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= github.com/anacrolix/utp v0.1.0/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk= -github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= @@ -186,8 +185,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.6.0/go.mod h1:q7o0j7d7HrJk/vr9uUt3BV github.com/aws/smithy-go v1.6.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/immutable v0.2.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= github.com/benbjohnson/immutable v0.3.0 h1:TVRhuZx2wG9SZ0LRdqlbs9S5BZ6Y24hJEHTCgWHZEIw= github.com/benbjohnson/immutable v0.3.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= @@ -239,13 +238,9 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dchest/siphash v1.2.1 h1:4cLinnzVJDKxTCl9B01807Yiy+W7ZzVHj/KIroQRvT4= github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= -github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= -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 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -278,12 +273,9 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/getlantern/appdir v0.0.0-20160830121117-659a155d06e8/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= github.com/getlantern/appdir v0.0.0-20180320102544-7c0f9d241ea7/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= github.com/getlantern/appdir v0.0.0-20200615192800-a0ef1968f4da h1:T/pxF37Z9SIQCHhMMUITZ3rhKRL0Noi9XxNwxKdBNw0= github.com/getlantern/appdir v0.0.0-20200615192800-a0ef1968f4da/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= -github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9 h1:IJKppG1QLU1rqbcwWG6YEMVB/QRzz+aUSXQDX5+Lsts= -github.com/getlantern/bbrconn v0.0.0-20210901194755-12169918fdf9/go.mod h1:HMPEgWG0J3goTYFWoTohloqZ3BQywXMElZnd9EROxxU= github.com/getlantern/borda v0.0.0-20220308134056-c4a5602f778e h1:mPtGf92RlHVeFsGNgVe0e6mIQS6uqymX++kDqRLrzL0= github.com/getlantern/borda v0.0.0-20220308134056-c4a5602f778e/go.mod h1:h/CNT4zYivoVZTnY3Yi/XkQCA2hlemWLjMEzKbIf5K4= github.com/getlantern/bufconn v0.0.0-20190625204133-a08544339f8d/go.mod h1:d6O4RY+V87kIt4o9wru4SaNo7C2NAkD3YnmJFXEpODo= @@ -295,8 +287,6 @@ github.com/getlantern/byteexec v0.0.0-20170405023437-4cfb26ec74f4/go.mod h1:4WCQ github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd h1:0xt9OTbV50a/+ZarMcr86ybWiN1v+bbwzdnVuXHzR/o= github.com/getlantern/byteexec v0.0.0-20220903142956-e6ed20032cfd/go.mod h1:oD9q9NB1LNBLHk3WAwza4tivxV7tm7jKFlCNCAv3+M8= github.com/getlantern/bytemap v0.0.0-20210122162547-b07440a617f0/go.mod h1:o01y9zxAVkFLqhZjC+mFXsN4NdxQG44Ff/nH1W4SuvI= -github.com/getlantern/cmux v0.0.0-20200905031936-c55b16ee8462 h1:eJkOdQpAgT9/v9KJD0UdQ90CGb7m8nXL33Qhk0AQ4x4= -github.com/getlantern/cmux v0.0.0-20200905031936-c55b16ee8462/go.mod h1:48COjs7jITfhkdw82LeMDQtrISx0CQG3/W0Ycr2UafM= github.com/getlantern/cmux/v2 v2.0.0-20200905031936-c55b16ee8462 h1:i5/Pd2raSQs59f0twxO/Fm3FaxpEsSSZKC0mxWnXumM= github.com/getlantern/cmux/v2 v2.0.0-20200905031936-c55b16ee8462/go.mod h1:oJz1ghfzM796DpGP0et6Gbc3si2Zn3/7l7KxxK/KXQ0= github.com/getlantern/cmuxprivate v0.0.0-20211216020409-d29d0d38be54 h1:aqzgkWfjRLDSIpTKU3x4a8MtqpRi5Jr2pt81Ga0moJQ= @@ -344,12 +334,8 @@ github.com/getlantern/fdcount v0.0.0-20210503151800-5decd65b3731/go.mod h1:XZwE+ github.com/getlantern/filepersist v0.0.0-20160317154340-c5f0cd24e799/go.mod h1:8DGAx0LNUfXNnEH+fXI0s3OCBA/351kZCiz/8YSK3i8= github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c h1:mcz27xtAkb1OuOLBct/uFfL1p3XxAIcFct82GbT+UZM= github.com/getlantern/filepersist v0.0.0-20210901195658-ed29a1cb0b7c/go.mod h1:8DGAx0LNUfXNnEH+fXI0s3OCBA/351kZCiz/8YSK3i8= -github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede h1:yrU6Px3ZkvCsDLPryPGi6FN+2iqFPq+JeCb7EFoDBhw= -github.com/getlantern/framed v0.0.0-20190601192238-ceb6431eeede/go.mod h1:nhnoiS6DE6zfe+BaCMU4YI01UpsuiXnDqM5S8jxHuuI= github.com/getlantern/fronted v0.0.0-20221102104652-893705395782 h1:Fjzra0nFtIqHLCnUA4XiSa+gFCmpi4/xe8vLAH1dN+U= github.com/getlantern/fronted v0.0.0-20221102104652-893705395782/go.mod h1:ZpmjHlwWN5sj3ViISNvvv4okVCuxTPBp7FedT+MO3w0= -github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822 h1:DhGGljbbvnXmBhh11b2MLTrkdkSIROy5Op1eylsM74U= -github.com/getlantern/geo v0.0.0-20221101125300-c661769d5822/go.mod h1:Xw0BLEMmlFOQ1FCBqqWfYEhc2Ss6V4S/56U0oKH/QFU= github.com/getlantern/geolookup v0.0.0-20210901195705-eec711834596 h1:K1d+3ZrUattlZ4F/76XWuAfSkVqGCBKhG6NU0UhxjFA= github.com/getlantern/geolookup v0.0.0-20210901195705-eec711834596/go.mod h1:C4lSABOxuIeQi36iYsO7xrcBzLDNeeB/nPVqYbHEnbo= github.com/getlantern/go-cache v0.0.0-20141028142048-88b53914f467 h1:10ez8C+7zyHzmnIiYybx9Qji/zO2tAAde69DfJMbUKY= @@ -366,11 +352,8 @@ github.com/getlantern/golog v0.0.0-20201105130739-9586b8bde3a9/go.mod h1:ZyIjgH/ github.com/getlantern/golog v0.0.0-20210606115803-bce9f9fe5a5f/go.mod h1:ZyIjgH/1wTCl+B+7yH1DqrWp6MPJqESmwmEQ89ZfhvA= github.com/getlantern/golog v0.0.0-20221014032422-49749a7176cf h1:VLM1gChzNF4KrFRa0BJDo/OnxG9ZDI6JNcNkqz4mZEI= github.com/getlantern/golog v0.0.0-20221014032422-49749a7176cf/go.mod h1:+ZU1h+iOVqWReBpky6d5Y2WL0sF2Llxu+QcxJFs2+OU= -github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb h1:tDQA66mL1vTHKSMu3Ras/9Tk884ipPAhcdQHXpnDhxg= -github.com/getlantern/gonat v0.0.0-20201001145726-634575ba87fb/go.mod h1:ysiamkJHyOrnlNmtDCCccH1NbFdgEBSJRg44DWiOxcY= github.com/getlantern/goproxy v0.0.0-20220805074304-4a43a9ed4ec6 h1:/jwJjghYGhLhpPYmO4IyHLG+VMVVZaIdgp8oe1dSx6E= github.com/getlantern/goproxy v0.0.0-20220805074304-4a43a9ed4ec6/go.mod h1:96OPoioYRaknNbHjFa4+itGZIJMnJ7wiQB2nz2q1h5Y= -github.com/getlantern/gotun v0.0.0-20190809092752-6d35bb1397ee/go.mod h1:zvsZQrsl7Yrmi+ENk5WZFT7dQaYtihAcI0H/9+LacqQ= github.com/getlantern/grtrack v0.0.0-20160824195228-cbf67d3fa0fd/go.mod h1:RkQEgBdrJCH5tYJP2D+a/aJ216V3c9q8w/tCJtEiDoY= github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac h1:WsJhOWm1hJEAqts1OAhEPctQpy7Y0Eiu05mV84ixekc= github.com/getlantern/grtrack v0.0.0-20210901195719-bdf9e1d12dac/go.mod h1:RkQEgBdrJCH5tYJP2D+a/aJ216V3c9q8w/tCJtEiDoY= @@ -383,15 +366,10 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2 github.com/getlantern/hidden v0.0.0-20201229170000-e66e7f878730/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770 h1:cSrD9ryDfTV2yaur9Qk3rHYD414j3Q1rl7+L0AylxrE= github.com/getlantern/hidden v0.0.0-20220104173330-f221c5a24770/go.mod h1:GOQsoDnEHl6ZmNIL+5uVo+JWRFWozMEp18Izcb++H+A= -github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049 h1:jnXDyEMgPDUjzCzmqhIsBqyLvmVOazOTxGQ0SzIc8F0= -github.com/getlantern/http-proxy v0.0.3-0.20230112154909-69209a6e2049/go.mod h1:zsMtNKXEfy+y3RBqe3wcd05VivKAswrIvlVsFrj7Fwk= -github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230215114357-157d6da42017 h1:8xNSI99SHy6VYtWvqY7GVPFcBzwf2PYfdJ7UbC2SBNM= -github.com/getlantern/http-proxy-lantern/v2 v2.8.1-0.20230215114357-157d6da42017/go.mod h1:P933PGfkJHnAbh7PorY+fo8pJTQAMpgM6lmj8DzlyZ8= github.com/getlantern/httpseverywhere v0.0.0-20201210200013-19ae11fc4eca h1:Of3VwFEfKbVnK5/VGy05XUbi6QvTs5Y2eLDfPv3O50E= github.com/getlantern/httpseverywhere v0.0.0-20201210200013-19ae11fc4eca/go.mod h1:TNC/xJFmctsSGyXqcnVWwCRCPD/4zGQP7yBVnLDRa/U= github.com/getlantern/i18n v0.0.0-20181205222232-2afc4f49bb1c h1:+JnT+Rwa/3rksc4Zi0u6fJ/WX+tPK58GtsrcXWVUU2U= github.com/getlantern/i18n v0.0.0-20181205222232-2afc4f49bb1c/go.mod h1:6yS3MFZmWDK0zxWXX0619QzZpqmCaHJ8P83Ee4QcTq0= -github.com/getlantern/idletiming v0.0.0-20190529182719-d2fbc83372a5/go.mod h1:MGP8kEgZGgAhvHISt0hJGQgxg/VAqGdw3+kSZBnfC/4= github.com/getlantern/idletiming v0.0.0-20200228204104-10036786eac5/go.mod h1:McaLC6faRlxJ9QjjqSjpEeYIjKnKA8+dzjoR+eYXCio= github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e h1:b0VWlP1TB369RANq5GnV76sGDm98eQwVJaaoH8OXOmw= github.com/getlantern/idletiming v0.0.0-20201229174729-33d04d220c4e/go.mod h1:McaLC6faRlxJ9QjjqSjpEeYIjKnKA8+dzjoR+eYXCio= @@ -400,28 +378,20 @@ github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696 h1:D7wbL2Ww6QN5S github.com/getlantern/iptool v0.0.0-20230112135223-c00e863b2696/go.mod h1:hfspzdRcvJ130tpTPL53/L92gG0pFtvQ6ln35ppwhHE= github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42 h1:h/VSx9E2MCHR/dSqwQmcRSGI+VSCFwuu4AcSMpXJ2Pg= github.com/getlantern/jibber_jabber v0.0.0-20210901195950-68955124cc42/go.mod h1:zwtJ4plEkFdyAcFfiY7ia++fludxUHZ3GBlyP1SDk4c= -github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54 h1:JqIiaDpL6CLgkq9Mfyd7GXSFm8EvgG0mVUd6I7TxNfw= -github.com/getlantern/kcp-go/v5 v5.0.0-20220503142114-f0c1cd6e1b54/go.mod h1:KFBWdR0PdEQK0JtGcE1lhAoYFVTRxWDFfYBARPb0t9Q= -github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966 h1:2JIEmUghZ9chENs5JmcHahPDioC5U8ZHLQKJRlfKUpM= -github.com/getlantern/kcpwrapper v0.0.0-20220503142841-b0e764933966/go.mod h1:RZpRkvvJxOFO4NsrUBalcGGioaG84GZT/0UURXEfIhY= -github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89 h1:gjlTAADW8ZUrIey+u1ZtbVlI91bqI0Bu+GBxvRlBBqo= -github.com/getlantern/keepcurrent v0.0.0-20221014183517-fcee77376b89/go.mod h1:EtJEobtQH/HiQsZLyRjlrnq/fu7vfgnTMzhbmUqkZ3M= github.com/getlantern/keyman v0.0.0-20180207174507-f55e7280e93a/go.mod h1:FMf0g72BHs14jVcD8i8ubEk4sMB6JdidBn67d44i3ws= github.com/getlantern/keyman v0.0.0-20200819205636-76fef27c39f1/go.mod h1:FMf0g72BHs14jVcD8i8ubEk4sMB6JdidBn67d44i3ws= github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c h1:42BHUoilinoKRbOvTsWBY9nr1+Y2cAxK7BkMdmIMvlM= github.com/getlantern/keyman v0.0.0-20210622061955-aa0d47d4932c/go.mod h1:lzCwzxjE8ciu+2bZku7kcCKfOYAXUs4stPn3elouYNI= github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a h1:z7G1v79GB1qRrkcbzF0nrLzV/+dwdGmamEZAp0ff+z0= github.com/getlantern/lampshade v0.0.0-20201109225444-b06082e15f3a/go.mod h1:cGOfTjvllC9bcwS7cVW6tGT6fXc8Dki384uFjm7XBnw= -github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230114153732-0193919d4860 h1:eMJ05nKDxgglPGWvAqcs4e23RRB3NoofVCtD0DDOV/Q= -github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230114153732-0193919d4860/go.mod h1:YCEW57ujbWaUeGRMhRjF0OgMBqUTNb3QsErbaQZq5K8= +github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93 h1:NsoNGY9DzwUWXpNWfc3H8Vheo7QgIZtQ0wERopWbi9k= +github.com/getlantern/lantern-shadowsocks v1.3.6-0.20230410104649-ad64a8858f93/go.mod h1:Wwa1uDdu6LxVRANcN2dQ+aNI0rY+km+dqHW2G9Qm34k= github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d h1:eHNQIN0hHuDN0lqQDrMu+CRpB9YOK3tj5deI5gz16c4= github.com/getlantern/libp2p v0.0.0-20220913092210-f9e794d6b10d/go.mod h1:i+mWXWdQz4iUyxh8ib+/tJVDwT5X3h58jbI7yX356Kg= github.com/getlantern/mandrill v0.0.0-20221004112352-e7c04248adcb h1:oyEMOT9jn4bzKyivF2sVBogsXyL8fBCK7HIT/P6h64Y= github.com/getlantern/mandrill v0.0.0-20221004112352-e7c04248adcb/go.mod h1:gz4iIB+vPk8hWxkAnnZSudQuIpBMnW7i89eHl9Fl+I8= -github.com/getlantern/measured v0.0.0-20170302221919-0582bf799783/go.mod h1:5OW2WJitCKExpSw2bploW2fM7PjOd6QnLqyp+IqToqU= github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be h1:rfdOTeKew6zcpf5BQ566WInLINdZARimtWVLcgP/a4I= github.com/getlantern/measured v0.0.0-20210507000559-ec5307b2b8be/go.mod h1:QG6d9+nAxD1PjVjgGLUUHPZBQUp20/h7j8a3kxd/8Rc= -github.com/getlantern/mitm v0.0.0-20180205214248-4ce456bae650/go.mod h1:jmIVbVxSVLdeY5hlD+6chiOR/9CdzPjVgIIQphviCl0= github.com/getlantern/mitm v0.0.0-20210622063317-e6510574903b h1:qwwHF+YUqsM2rMVfzptcfsEGW4y7NAcFOhKoAWLmb+I= github.com/getlantern/mitm v0.0.0-20210622063317-e6510574903b/go.mod h1:chGLTBaCheavOG9k+IjbjTrXEL3Sszz1MWzqZR5M5nE= github.com/getlantern/mockconn v0.0.0-20190708122800-637bd46d8034/go.mod h1:+F5GJ7qGpQ03DBtcOEyQpM30ix4BLswdaojecFtsdy8= @@ -439,7 +409,6 @@ github.com/getlantern/multipath v0.0.0-20220920195041-55195f38df73/go.mod h1:uzx github.com/getlantern/nettest v1.0.0 h1:xg8vq9JrGzrFGFkFGwZwIJ5+kwtvyqNDIADwrANvhQg= github.com/getlantern/nettest v1.0.0/go.mod h1:8wY0QwrdpkayCBQXjhZoJuwu2IHfp4UErrxgwaJ2UM4= github.com/getlantern/netx v0.0.0-20190110220209-9912de6f94fd/go.mod h1:wKdY0ikOgzrWSeB9UyBVKPRhjXQ+vTb+BPeJuypUuNE= -github.com/getlantern/netx v0.0.0-20210803075350-eb4fa6261e47/go.mod h1:g7yY/ImU8M+7lS09wVG3GTsxNvtPMTvkeWZVfxowtMo= github.com/getlantern/netx v0.0.0-20211206143627-7ccfeb739cbd h1:z5IehLDMqMwJ0oeFIaMHhySRU8r1lRMh7WQ0Wn0LioA= github.com/getlantern/netx v0.0.0-20211206143627-7ccfeb739cbd/go.mod h1:WEXF4pfIfnHBUAKwLa4DW7kcEINtG6wjUkbL2btwXZQ= github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= @@ -448,9 +417,6 @@ github.com/getlantern/ops v0.0.0-20220713155959-1315d978fff7 h1:Od0xvR4iK3gZwhkI github.com/getlantern/ops v0.0.0-20220713155959-1315d978fff7/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= github.com/getlantern/osversion v0.0.0-20230221120431-d6f9971f8ccf h1:eBrN3ukzZnzTvKA5pf4Kh2bqRxUVzxKiga453r/S1wk= github.com/getlantern/osversion v0.0.0-20230221120431-d6f9971f8ccf/go.mod h1:m3uzMz4/vMTlZEIP3aQL0wjpSFblQsuNcgMZpfRgmos= -github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360 h1:pijUoofaQcAM/8zbDzZM2LQ90kGVbKfnSAkFnQwLZZU= -github.com/getlantern/packetforward v0.0.0-20201001150407-c68a447b0360/go.mod h1:nsJPNYUSY96xB+p7uiDW8O4uiKea+KjeUdS5d6tf9IU= -github.com/getlantern/preconn v0.0.0-20180328114929-0b5766010efe/go.mod h1:FvIxQD61iYA42UjaJyzGl9DNne8jbowbgicdeNk/7kE= github.com/getlantern/preconn v1.0.0 h1:DsY3l/y/BJUj86WyaxXylbJnCC9QbKcc3D6js6rFL60= github.com/getlantern/preconn v1.0.0/go.mod h1:i/AnXvx715Fq7HgZLlmQlw3sGfEkku8BQT5hLHMK4+k= github.com/getlantern/probe v0.0.0-20191107230642-ed284e08029a/go.mod h1:EPE0nd9YNS2FTIz+2EOkqojCuqaQlJ+fTiLPklsqe/E= @@ -460,7 +426,6 @@ github.com/getlantern/probednet v0.0.0-20190725133252-1cfdb2354b4d/go.mod h1:7sl github.com/getlantern/probednet v0.0.0-20200930023717-dd97fef56a97/go.mod h1:noglym51kFdkZEV/WjiIzRKV6qwwTI9/vSAjeOI/zCU= github.com/getlantern/probednet v0.0.0-20211216020507-22fd9c1d3bf6 h1:8jg6OehdQr90Ybmyc68raXEqM/1hk8E7F2YAUfmcvzE= github.com/getlantern/probednet v0.0.0-20211216020507-22fd9c1d3bf6/go.mod h1:noglym51kFdkZEV/WjiIzRKV6qwwTI9/vSAjeOI/zCU= -github.com/getlantern/proxy/v2 v2.0.0/go.mod h1:jU6qNaMq92qDY0slT9afuER7arXLnh7jU+DTg3W/oDs= github.com/getlantern/proxy/v2 v2.0.1-0.20220303164029-b34b76e0e581 h1:7NrSoq9ce/n15O+0smA756lo86c+coYoyGAhefRJCPw= github.com/getlantern/proxy/v2 v2.0.1-0.20220303164029-b34b76e0e581/go.mod h1:81jIwwI/5NGYj2CSvbsZapcTe87jd6AeEu6yJD1NKIg= github.com/getlantern/proxybench v0.0.0-20220404140110-f49055cb86de h1:328hcuyQi8KGZr4GV2EtWllwBmS10oVGevwZEOk2dDE= @@ -473,8 +438,6 @@ github.com/getlantern/quicproxy v0.0.0-20220808081037-32e9be8ec447 h1:4Fg+1ghYOJ github.com/getlantern/quicproxy v0.0.0-20220808081037-32e9be8ec447/go.mod h1:LOb27iGUxgV4WM7gZVUawhbMgoEOKI5iuR6ssav7Zik= github.com/getlantern/quicwrapper v0.0.0-20230124133216-09e62d6a4ff2 h1:mV2jysb8uosKdbQYRqusw1Kje2bzLZJBShO0tW/VaAM= github.com/getlantern/quicwrapper v0.0.0-20230124133216-09e62d6a4ff2/go.mod h1:XQq0XZppAHAeHK5cPzNNPdmhBYyTgAxcgT5jXxh50P8= -github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7 h1:47FJ5kTeXc3I1VPpi2hWW9I16/Y3K0cpUq/B7oWJGF8= -github.com/getlantern/ratelimit v0.0.0-20220926192648-933ab81a6fc7/go.mod h1:OOqKCIkspqXtIWEex4uhH1H9l7NGekT9i3Hs591ZDk4= github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c h1:IkjF+RwRs8B/RsuD638eUFO2K/227OO2B1FLXGp17Ro= github.com/getlantern/reconn v0.0.0-20161128113912-7053d017511c/go.mod h1:kExwbqTx1krUnT9ohmXG3jayDTEBfxUKeoRzU6XucLw= github.com/getlantern/redis-utils v0.0.0-20210823133122-d4f0e525e095/go.mod h1:1X9DhzvePQ89WjJRzY2DA5Xpgi7jI0i5E0rFjYxgPWI= @@ -490,7 +453,6 @@ github.com/getlantern/sqlite v0.0.0-20220301112206-cb2f8bc7cb56 h1:sAXnWKv8c28+G github.com/getlantern/sqlite v0.0.0-20220301112206-cb2f8bc7cb56/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4= github.com/getlantern/sqlparser v0.0.0-20171012210704-a879d8035f3c/go.mod h1:wGjYYh1vSkRes1bNy+zio7cmmI9cLbST+H8eqnt5Mg4= github.com/getlantern/testify v0.0.0-20160317154340-2eeb3906e78f h1:R6iv+VzCrbxlBm2TcgyJi9c7tQguNXi9JmIvuUJKrdc= -github.com/getlantern/testify v0.0.0-20160317154340-2eeb3906e78f/go.mod h1:uKKI9HSwZ4C8tx1vV+ovbG32Lw9LixtzPLNiS8U/ddA= github.com/getlantern/testredis v0.0.0-20210610142259-c0995d455766/go.mod h1:f57SFFLkB+WLz10IoqovqksV6fTK91SuweVS21OEkdc= github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9 h1:VTNjZxSuAHUzu13lYpEVB8gc3xz5hZePGNHG5enHYLY= github.com/getlantern/timezone v0.0.0-20210901200113-3f9de9d360c9/go.mod h1:7uvbzuoOr3uYGHZx5QWlI8/C52XEf/aTb/tJFEe41Ak= @@ -512,7 +474,6 @@ github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad h1:F7Pl+9tS7QtyCzL github.com/getlantern/upnp v0.0.0-20220531140457-71a975af1fad/go.mod h1:ZZCjqcZBEc+UK2hjZf3saA3Hiw2z2CXTTF6r4tu0+i0= github.com/getlantern/utls v0.0.0-20221011213556-17014cb6fc4a h1:A12K3qOcLk8kwp+NB7OonNskzaYA+tIXvTPuk0Gor6I= github.com/getlantern/utls v0.0.0-20221011213556-17014cb6fc4a/go.mod h1:xleouNszTteqmcvv1JZiPuBY+MnTh/xV34mi0HYmiqk= -github.com/getlantern/uuid v1.1.2-0.20190507182000-5c9436b8c718/go.mod h1:uX10hOzZUUDR+oYNSIks+RcozOEiwTNC/K2rw9SUi1k= github.com/getlantern/uuid v1.2.0 h1:pGrGaCV7XEaG6lvjWkwf8Y92BjB/9yFmkKsNFpRQ7rc= github.com/getlantern/uuid v1.2.0/go.mod h1:uX10hOzZUUDR+oYNSIks+RcozOEiwTNC/K2rw9SUi1k= github.com/getlantern/vtime v0.0.0-20160810174823-dc1e573cf991/go.mod h1:Sfa815JjnYX/fxcE/nHKxyanK/2Iy+6FbMO4/ou3gWw= @@ -555,8 +516,6 @@ github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNI github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-redis/redis/v8 v8.10.0/go.mod h1:vXLTvigok0VtUX0znvbcEW1SOt4OA9CU1ZfnOtKOaiM= github.com/go-redis/redis/v8 v8.11.3/go.mod h1:xNJ9xDG09FsIPwh3bWdk+0oDWHbtF9rPN0F/oD9XeKc= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -577,8 +536,6 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -609,25 +566,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu 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/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf h1:ukIp7SJ4RNEkyqdn8EZDzUTOsqWUbHnwPGU3d8pc7ok= -github.com/gonum/blas v0.0.0-20180125090452-e7c5890b24cf/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= -github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5 h1:YEwYZI2QOW/49JC7hb5X5irk1J4BJc6Q37OnahdSuek= -github.com/gonum/floats v0.0.0-20180125090339-7de1f4ea7ab5/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= -github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2 h1:GUSkTcIe1SlregbHNUKbYDhBsS8lNgYfIp4S4cToUyU= -github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571 h1:7ARdo5TcdMorNtejbaqYDEcsqOdPf3iAoUIeoMhvu7E= -github.com/gonum/internal v0.0.0-20180125090855-fda53f8d2571/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= -github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece h1:dXIQoswVYAQd8m2jqYdxKn2lCkLlcZfSyu66k6akgis= -github.com/gonum/lapack v0.0.0-20180125091020-f0b8b25edece/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= -github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29 h1:Aj+poYy0aVF2abLrHVN2aAxynAGg2AO8VtIJKSnmxMA= -github.com/gonum/matrix v0.0.0-20180124231301-a41cc49d4c29/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= -github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4 h1:ljlDrxv0Wij8s9+WEYGswFmz/SEg75X832pYRsYA56Y= -github.com/gonum/stat v0.0.0-20180125090729-ec9c8a1062f4/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -641,7 +582,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -721,9 +661,6 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= -github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4 h1:nwOc1YaOrYJ37sEBrtWZrdqzK22hiJs3GpDmP3sR2Yw= -github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -740,21 +677,11 @@ github.com/kataras/golog v0.1.7 h1:0TY5tHn5L5DlRIikepcaRR/6oInIr9AiWsxzt0vvlBE= github.com/kataras/pio v0.0.11 h1:kqreJ5KOEXGMwHAWHDwIl+mjfNCPhAwZPa8gK7MKlyw= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= 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.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= -github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/klauspost/reedsolomon v1.9.9 h1:qCL7LZlv17xMixl55nq2/Oa1Y86nfO8EqDfv2GHND54= -github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -786,21 +713,9 @@ github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= -github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= -github.com/mdlayher/netlink v1.1.0 h1:mpdLgm+brq10nI9zM1BpX1kpDbh3NLl3RSnVq6ZSkfg= -github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= -github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= -github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7 h1:fUYt2LlQHBIeNIprp6udnj9l4DerORtm/hjJUG+Xr8s= -github.com/mikioh/tcp v0.0.0-20180707144002-02a37043a4f7/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f h1:sMVMj7EiIYDQogkui8CPvTMXJTVLhr0jOvoaiIuegu8= -github.com/mikioh/tcpinfo v0.0.0-20180831101334-131b59fef27f/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8 h1:PtrDbVbpg4dKJHCD65yyohKbuSf8FO8l3dvAsFfuif8= -github.com/mikioh/tcpopt v0.0.0-20180707144150-7178f18b4ea8/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= @@ -810,8 +725,6 @@ github.com/mitchellh/go-server-timing v1.0.0/go.mod h1:RdipKQzCJaL4HyxFQBINbf4Xo github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104 h1:ULR/QWMgcgRiZLUjSSJMU+fW+RDMstRdmnDWj9Q+AsA= -github.com/mmcloughlin/avo v0.0.0-20200803215136-443f81d77104/go.mod h1:wqKykBG2QzQDJEzvRkcS8x6MiSJkF52hXZsXcjaB3ls= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -819,6 +732,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= @@ -826,9 +740,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/ncw/swift v1.0.52/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/nwaples/rardecode v1.1.2 h1:Cj0yZY6T1Zx1R7AhTbyGSALm44/Mmq+BAPc4B/p/d3M= -github.com/nwaples/rardecode v1.1.2/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -850,15 +761,9 @@ github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7 github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/oschwald/geoip2-golang v1.5.0/go.mod h1:xdvYt5xQzB8ORWFqPnqMwZpCpgNagttWdoZLlJQzg7s= -github.com/oschwald/geoip2-golang v1.8.0 h1:KfjYB8ojCEn/QLqsDU0AzrJ3R5Qa9vFlx3z6SLNcKTs= -github.com/oschwald/geoip2-golang v1.8.0/go.mod h1:R7bRvYjOeaoenAp9sKRS8GX5bJWcZ0laWO5+DauEktw= github.com/oschwald/maxminddb-golang v1.8.0/go.mod h1:RXZtst0N6+FY/3qCNmZMBApR19cdQj43/NM9VkrNAis= -github.com/oschwald/maxminddb-golang v1.10.0 h1:Xp1u0ZhqkSuopaKmk1WwHtjF0H9Hd9181uj2MQ5Vndg= -github.com/oschwald/maxminddb-golang v1.10.0/go.mod h1:Y2ELenReaLAZ0b400URyGwvYxHV1dLIxBuyOsyYjHK0= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/oxtoacart/emsort v0.0.0-20160911032127-e467347e3354/go.mod h1:IQ2AliaPIeFz7bCSZl4NkBSh+JKdYqrjoSkE+tTH7P4= @@ -874,10 +779,7 @@ github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHu github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.12 h1:44l88ehTZAUGW4VlO1QC4zkilL99M6Y9MXNwEs0uzP8= -github.com/pierrec/lz4/v4 v4.1.12/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E= github.com/pion/datachannel v1.5.2/go.mod h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ= @@ -989,13 +891,12 @@ github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5P github.com/samber/lo v1.25.0 h1:H8F6cB0RotRdgcRCivTByAQePaYhGMdOTJIj2QFS2I0= github.com/samber/lo v1.25.0/go.mod h1:2I7tgIv8Q1SG2xEIkRq0F2i2zgxVpnyPOP0d3Gj2r+A= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/shadowsocks/go-shadowsocks2 v0.1.4-0.20201002022019-75d43273f5a5 h1:PH+QJxWqlFTux7T1inBImjualkfKum8UKgAsRqDMmbM= -github.com/shadowsocks/go-shadowsocks2 v0.1.4-0.20201002022019-75d43273f5a5/go.mod h1:/jk7XQoEyq98sd0ckJtBhaaFqfnzWm7CX/OzUAIy/Kk= +github.com/shadowsocks/go-shadowsocks2 v0.1.5 h1:PDSQv9y2S85Fl7VBeOMF9StzeXZyK1HakRm86CUbr28= +github.com/shadowsocks/go-shadowsocks2 v0.1.5/go.mod h1:AGGpIoek4HRno4xzyFiAtLHkOpcoznZEkAccaI/rplM= github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= -github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 h1:xT+JlYxNGqyT+XcU8iUrN18JYed2TvG9yN5ULG2jATM= github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= github.com/siddontang/goredis v0.0.0-20180423163523-0b4019cbd7b7/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s= @@ -1014,7 +915,6 @@ github.com/songgao/water v0.0.0-20190725173103-fd331bda3f4b/go.mod h1:P5HUIBuIWK github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8= github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -1038,28 +938,17 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/templexxx/cpu v0.0.1/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk= -github.com/templexxx/cpu v0.0.8 h1:va6GebSxedVdR5XEyPJD49t94p5ZsjWO6Wh/PfbmZnc= -github.com/templexxx/cpu v0.0.8/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk= -github.com/templexxx/xorsimd v0.4.1 h1:iUZcywbOYDRAZUasAs2eSCUW8eobuZDy0I9FJiORkVg= -github.com/templexxx/xorsimd v0.4.1/go.mod h1:W+ffZz8jJMH2SXwuKu9WhygqBMbFnp14G2fqEr8qaNo= github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= -github.com/ti-mo/conntrack v0.3.0 h1:572/72R9la2FVvO6CbsLiCmR48U3pgCvIlLKoUrExDU= -github.com/ti-mo/conntrack v0.3.0/go.mod h1:tPSYNx21TnjxGz99pLD/lAN4fuEViaJZz+pliMqnovk= -github.com/ti-mo/netfilter v0.3.1 h1:+ZTmeTx+64Jw2N/1gmqm42kruDWjQ90SMjWEB1e6VDs= -github.com/ti-mo/netfilter v0.3.1/go.mod h1:t/5HvCCHA1LAYj/AZF2fWcJ23BQTA7lzTPCuwwi7xQY= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= 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.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= -github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tkuchiki/go-timezone v0.2.0 h1:yyZVHtQRVZ+wvlte5HXvSpBkR0dPYnPEIgq9qqAqltk= @@ -1070,19 +959,11 @@ github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnD github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de/go.mod h1:irMhzlTz8+fVFj6CH2AN2i+WI5S6wWFtK3MBCIxIpyI= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/vulcand/oxy v0.0.0-20180330141130-3a0f6c4b456b h1:ioaiAF0xFShpgoyjNsjVauaCSa+5p9HSltCHyFDhMu0= github.com/vulcand/oxy v0.0.0-20180330141130-3a0f6c4b456b/go.mod h1:giFb8dicROVdV5W0HXlA5siMBLWKnVXZlkA4Y5ZIzrY= 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/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xitongsys/parquet-go v1.5.1/go.mod h1:xUxwM8ELydxh4edHGegYq1pA8NnMKDx0K/GyB0o2bww= github.com/xitongsys/parquet-go v1.6.2/go.mod h1:IulAQyalCm0rPiZVNnCgm/PCL64X2tdSVGMQ/UeKqWA= @@ -1090,7 +971,6 @@ github.com/xitongsys/parquet-go-source v0.0.0-20190524061010-2b72cbee77d5/go.mod github.com/xitongsys/parquet-go-source v0.0.0-20200817004010-026bad9b25d0/go.mod h1:HYhIKsdns7xz80OgkbgJYrtQY7FjHWHKH6cvN7+czGE= github.com/xitongsys/parquet-go-source v0.0.0-20211228015320-b4f792c43cd0/go.mod h1:qLb2Itmdcp7KPa5KZKvhE9U1q5bYSOmgeOckF/H2rQA= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM= github.com/xtaci/smux v1.5.10/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY= github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01 h1:ucyjgLtiX0nJKpFwoOCf0FV7COPz4cUOjBC5Qg4T/kc= github.com/xtaci/smux v1.5.15-0.20200704123958-f7188026ba01/go.mod h1:OMlQbT5vcgl2gb49mFkYo6SMf+zP3rcjcwQz7ZU7IGY= @@ -1147,6 +1027,7 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -1155,7 +1036,6 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -golang.org/x/arch v0.0.0-20190909030613-46d78d1859ac/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1165,20 +1045,19 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1214,8 +1093,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -1236,10 +1115,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL 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-20190724013045-ca1201d0de80/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-20190912160710-24e19bdeb0f2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191021144547-ec77196f6094/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1277,8 +1154,8 @@ golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 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/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1298,8 +1175,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde h1:ejfdSekXMDxDLbRrJMwUk6KnSLZ2McaUCVcIKM+N6jc= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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= @@ -1310,23 +1187,19 @@ golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190516110030-61b9204099cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190912141932-bc967efca4b8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1350,7 +1223,6 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1374,8 +1246,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220608164250-635b8c9b7f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1387,8 +1259,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/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/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1432,7 +1304,6 @@ golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1446,8 +1317,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 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=